// Copyright (C) 2006-2009, 2012 Alexander Nasonov // Copyright (C) 2012 Lorenzo Caminiti // Distributed under the Boost Software License, Version 1.0 // (see accompanying file LICENSE_1_0.txt or a copy at // http://www.boost.org/LICENSE_1_0.txt) // Home at http://www.boost.org/libs/scope_exit #include #include #include #include #include #include #include #include using namespace boost::unit_test; template void tpl_long( type tval , type & t , type const& tc , type volatile& tv , type const volatile& tcv ) { int i = 0; // non-dependent name type const remember(tval); { BOOST_SCOPE_EXIT_TPL( (&tval) (&t) (&tc) (&tv) (&tcv) (&i) ) { tval = 1; ++t; ++tv; } BOOST_SCOPE_EXIT_END BOOST_CHECK( t == remember ); BOOST_CHECK( tval == remember ); } BOOST_CHECK( tval == 1 ); BOOST_CHECK( t == remember + 2 ); } template void tpl_vector( Vector vval , Vector & v , Vector const& vc ) { Vector const remember(vval); { BOOST_SCOPE_EXIT_TPL( (&vval) (&v) (&vc) ) { v.push_back(-Value); vval.push_back(Value); } BOOST_SCOPE_EXIT_END BOOST_CHECK( v.size() == remember.size() ); BOOST_CHECK( vval.size() == remember.size() ); } BOOST_CHECK( v.size() == 1 + remember.size() ); BOOST_CHECK( vval.size() == 1 + remember.size() ); } void test_tpl(void) { long l = 137; tpl_long(l, l, l, l, l); std::vector v(10, 137); tpl_vector, 13>(v, v, v); } test_suite* init_unit_test_suite(int, char* []) { framework::master_test_suite().p_name.value = "Unit test for ScopeExit TPL"; framework::master_test_suite().add(BOOST_TEST_CASE(&test_tpl)); return 0; }