/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #include #include #include #include #include #include #include #include int n = 0; using std::cout; using std::endl; struct X { X(int, int, int) { cout << "new X(int, int, int)" << endl; ++n; } X() { cout << "new X" << endl; ++n; } ~X() { cout << "delete X" << endl; --n; } }; int main() { using boost::phoenix::arg_names::arg1; using boost::phoenix::construct; using boost::phoenix::delete_; using boost::phoenix::new_; using std::for_each; using std::vector; { vector v(10); for_each(v.begin(), v.end(), arg1 = new_()); for_each(v.begin(), v.end(), delete_(arg1)); for_each(v.begin(), v.end(), arg1 = new_(1, 2, 3)); for_each(v.begin(), v.end(), delete_(arg1)); } { using boost::shared_ptr; vector > v(10); for_each(v.begin(), v.end(), arg1 = boost::phoenix::construct >(new_()) ); } BOOST_TEST(n == 0); return boost::report_errors(); }