// 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 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_TEST(t == remember); BOOST_TEST(tval == remember); } BOOST_TEST(tval == 1); BOOST_TEST(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_TEST(v.size() == remember.size()); BOOST_TEST(vval.size() == remember.size()); } BOOST_TEST(v.size() == 1 + remember.size()); BOOST_TEST(vval.size() == 1 + remember.size()); } int main(void) { long l = 137; tpl_long(l, l, l, l, l); std::vector v(10, 137); tpl_vector, 13>(v, v, v); return boost::report_errors(); }