1 2 // Copyright (C) 2006-2009, 2012 Alexander Nasonov 3 // Copyright (C) 2012 Lorenzo Caminiti 4 // Distributed under the Boost Software License, Version 1.0 5 // (see accompanying file LICENSE_1_0.txt or a copy at 6 // http://www.boost.org/LICENSE_1_0.txt) 7 // Home at http://www.boost.org/libs/scope_exit 8 9 #include <boost/scope_exit.hpp> 10 #include <boost/config.hpp> 11 #include <boost/typeof/typeof.hpp> 12 #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() 13 #include <boost/detail/lightweight_test.hpp> 14 15 template<typename T> 16 struct this_tester; 17 BOOST_TYPEOF_REGISTER_TEMPLATE(this_tester, 1) // Before`this_` capture. 18 19 template<typename T> 20 struct this_tester { checkthis_tester21 void check(void) { 22 value_ = -1; 23 24 BOOST_SCOPE_EXIT_TPL( (this_) ) { 25 BOOST_TEST(this_->value_ == 0); 26 } BOOST_SCOPE_EXIT_END 27 28 #ifndef BOOST_NO_CXX11_LAMBDAS 29 BOOST_SCOPE_EXIT_ALL(&, this) { 30 BOOST_TEST(this->value_ == 0); 31 }; 32 #endif // lambdas 33 34 value_ = 0; 35 } 36 37 private: 38 T value_; 39 }; 40 main(void)41int main(void) { 42 this_tester<int>().check(); 43 return boost::report_errors(); 44 } 45 46