diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 0d52b93..b76fda6 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -167,6 +167,7 @@ import testing ; [ run shared_from_raw_test3.cpp ] [ run shared_from_raw_test4.cpp ] [ run shared_from_raw_test5.cpp ] + [ run shared_from_raw_test6.cpp ] [ run weak_from_raw_test.cpp ] ; } diff --git a/test/shared_from_raw_test6.cpp b/test/shared_from_raw_test6.cpp new file mode 100644 index 0000000..d1941c6 --- /dev/null +++ b/test/shared_from_raw_test6.cpp @@ -0,0 +1,52 @@ +// +// shared_from_raw_test6 +// +// Tests that dangling shared_ptr instances are caught by +// the BOOST_ASSERT in ~enable_shared_from_raw +// +// Copyright 2014 Peter Dimov +// +// 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 +// + +#define BOOST_ENABLE_ASSERT_HANDLER +#include +#include +#include +#include + +static int assertion_failed_ = 0; + +namespace boost +{ + +void assertion_failed( char const * expr, char const * function, char const * file, long line ) +{ + printf( "Assertion '%s' failed in function '%s', file '%s', line %ld\n", expr, function, file, line ); + ++assertion_failed_; +} + +} // namespace boost + +class X: public boost::enable_shared_from_raw +{ +}; + +int main() +{ + boost::shared_ptr px; + + { + X x; + px = boost::shared_from_raw( &x ); + } + + BOOST_TEST_EQ( assertion_failed_, 1 ); + + // px is a dangling pointer here + + return boost::report_errors(); +}