From 711c36958a56af392baf92ad3bac749b71bf76dd Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Wed, 28 Jan 2015 12:52:10 +0200 Subject: [PATCH] Add an additional weak_from_raw test. --- test/Jamfile.v2 | 1 + test/weak_from_raw_test5.cpp | 45 ++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 test/weak_from_raw_test5.cpp diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 8f73f70..b17e55f 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -173,6 +173,7 @@ import testing ; [ run weak_from_raw_test2.cpp ] [ run weak_from_raw_test3.cpp ] [ run weak_from_raw_test4.cpp ] + [ run weak_from_raw_test5.cpp ] [ compile sp_explicit_inst_test.cpp ] diff --git a/test/weak_from_raw_test5.cpp b/test/weak_from_raw_test5.cpp new file mode 100644 index 0000000..7459bce --- /dev/null +++ b/test/weak_from_raw_test5.cpp @@ -0,0 +1,45 @@ +// +// weak_from_raw_test4.cpp +// +// Tests whether pointers returned from weak_from_raw +// expire properly +// +// Copyright 2015 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 +// + +#include +#include +#include + +class X: public boost::enable_shared_from_raw +{ +public: + + explicit X( boost::weak_ptr< X > & r ) + { + r = boost::weak_from_raw( this ); + } +}; + +int main() +{ + boost::weak_ptr p1, p2; + + { + boost::shared_ptr< X > px( new X( p1 ) ); + p2 = boost::weak_from_raw( px.get() ); + + BOOST_TEST( !p1.expired() ); + BOOST_TEST( !p2.expired() ); + } + + BOOST_TEST( p1.expired() ); + BOOST_TEST( p2.expired() ); + + return boost::report_errors(); +}