Boostのtrunkに、Boost.ScopeExitのC++11 ラムダ対応の実装が入りました。
C++11のラムダ式が使える環境では、デフォルトキャプチャが使用できるようになり、BOOST_SCOPE_EXIT_ENDを書く必要がなくなります。
#include <iostream> #include <boost/scope_exit.hpp> int a = 0; int b = 0; // C++11 lambda style void f() { a = 1; BOOST_SCOPE_EXIT((&)) { a = 3; }; a = 2; } // C++03 style void g() { b = 1; BOOST_SCOPE_EXIT((&b)) { b = 3; } BOOST_SCOPE_EXIT_END b = 2; } int main() { f(); std::cout << a << std::endl; g(); std::cout << b << std::endl; }
3 3
Boost 1.49.0くらいに入ると思われます。