Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

file 79 lines (71 sloc) 1.689 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
#include <boost/scope_exit.hpp>
#include <boost/scope_failure.hpp>
#include <boost/scope_success.hpp>
#include <iostream>
#include <ostream>

#include "examples_common.hpp"

using namespace std;

#ifdef BOOST_NO_LAMBDAS
int main(int,char *[])
{
    return 0;
}
#else

#define SCOPE_ALL_REF_exit BOOST_SCOPE_EXIT_ALL(&)
#define SCOPE_ALL_REF_failure SCOPE_FAILURE_ALL(&)
#define SCOPE_ALL_REF_success SCOPE_SUCCESS_ALL(&)

#define scope(when) SCOPE_ALL_REF_##when

int main()
{
    try
    {
        int some_var=1;
        cout << "Case #1: stack unwinding" << endl;
        scope(exit)
        {
            cout << "exit " << some_var << endl;
            ++some_var;
        };
        scope(failure)
        {
            cout << "failure " << some_var << endl;
            ++some_var;
        };
        scope(success)
        {
            cout << "success " << some_var << endl;
            ++some_var;
        };
        throw 1;
    } catch(int){}
    {
        int some_var=1;
        cout << "Case #2: normal exit" << endl;
        scope(exit)
        {
            cout << "exit " << some_var << endl;
            ++some_var;
        };
        scope(failure)
        {
            cout << "failure " << some_var << endl;
            ++some_var;
        };
        scope(success)
        {
            cout << "success " << some_var << endl;
            ++some_var;
        };
    }
    return 0;
}

ExpectedStdoutTest test_cout
(
        "Case #1: stack unwinding\n"
        "failure 1\n"
        "exit 2\n"
        "Case #2: normal exit\n"
        "success 1\n"
        "exit 2\n"
);

#endif
Something went wrong with that request. Please try again.