// (C) Copyright Jonathan Turkanis 2004 // 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.) // This test should compile and execute successfully for static_move_ptr, // but compile and fail to execute successfully for dynamic_move_ptr. #include #include #include "./detail/move_ptr.hpp" #include "./detail/hierarchy_non_virtual_dtor.hpp" using namespace boost; using namespace boost::move_ptrs::test; using boost::unit_test_framework::test_suite; void construction_non_virtual_test() { max_count = 1; { BOOST_MOVE_PTR ptr(new base); } BOOST_CHECK(base::count() == 0); { BOOST_MOVE_PTR ptr(new derived); } BOOST_CHECK(derived::count() == 0); { BOOST_MOVE_PTR ptr(new derived); } BOOST_CHECK(derived::count() == 0); { BOOST_MOVE_PTR ptr(BOOST_MOVE_PTR(new derived)); } BOOST_CHECK(derived::count() == 0); { BOOST_MOVE_PTR ptr(BOOST_MOVE_PTR(new derived)); } BOOST_CHECK(derived::count() == 0); { // The following version fails on EDG. //BOOST_MOVE_PTR ptr(BOOST_MOVE_PTR(new derived)); BOOST_MOVE_PTR ptr = BOOST_MOVE_PTR(new derived); } BOOST_CHECK(derived::count() == 0); #ifndef BOOST_MOVE_PTR_NO_ARRAY_SUPPORT max_count = array_size; { BOOST_MOVE_PTR ptr(new base[array_size]); } BOOST_CHECK(base::count() == 0); { // The following version fails on EDG. //BOOST_MOVE_PTR ptr(BOOST_MOVE_PTR(new base[array_size])); BOOST_MOVE_PTR ptr = BOOST_MOVE_PTR(new base[array_size]); } BOOST_CHECK(base::count() == 0); #endif } test_suite* init_unit_test_suite(int, char* []) { test_suite* test = BOOST_TEST_SUITE("construction non virtual test"); test->add(BOOST_TEST_CASE(&construction_non_virtual_test)); return test; }