diff --git a/include/boost/shared_ptr.hpp b/include/boost/shared_ptr.hpp index f2b4689..8720a2c 100644 --- a/include/boost/shared_ptr.hpp +++ b/include/boost/shared_ptr.hpp @@ -88,7 +88,7 @@ template void sp_enable_shared_from_this(boost::enable_shared_ if(pe != 0) pe->_internal_weak_this._internal_assign(px, pn); } -inline void sp_enable_shared_from_this(void const *, void const *, shared_count const &) +inline void sp_enable_shared_from_this(void const volatile *, void const volatile *, shared_count const &) { } diff --git a/test/shared_ptr_test.cpp b/test/shared_ptr_test.cpp index 9e3bf10..3e36c24 100644 --- a/test/shared_ptr_test.cpp +++ b/test/shared_ptr_test.cpp @@ -123,10 +123,31 @@ private: long Y::instances = 0; +template void pc0_test(T * p) +{ + BOOST_TEST(p == 0); + boost::shared_ptr pt(p); + BOOST_TEST(pt? false: true); + BOOST_TEST(!pt); + BOOST_TEST(pt.get() == 0); + BOOST_TEST(pt.use_count() == 1); + BOOST_TEST(pt.unique()); +} + void pointer_constructor() { + pc0_test(static_cast(0)); + +#if !defined(BOOST_MSVC) || (BOOST_MSVC > 1200) + + pc0_test(static_cast(0)); + pc0_test(static_cast(0)); + pc0_test(static_cast(0)); + +#endif + { - boost::shared_ptr pi(static_cast(0)); + boost::shared_ptr pi(static_cast(0)); BOOST_TEST(pi? false: true); BOOST_TEST(!pi); BOOST_TEST(pi.get() == 0); @@ -135,7 +156,7 @@ void pointer_constructor() } { - boost::shared_ptr pi(static_cast(0)); + boost::shared_ptr pi(static_cast(0)); BOOST_TEST(pi? false: true); BOOST_TEST(!pi); BOOST_TEST(pi.get() == 0); @@ -161,14 +182,10 @@ void pointer_constructor() BOOST_TEST(pv.unique()); } - { - boost::shared_ptr px(static_cast(0)); - BOOST_TEST(px? false: true); - BOOST_TEST(!px); - BOOST_TEST(px.get() == 0); - BOOST_TEST(px.use_count() == 1); - BOOST_TEST(px.unique()); - } + pc0_test(static_cast(0)); + pc0_test(static_cast(0)); + pc0_test(static_cast(0)); + pc0_test(static_cast(0)); { boost::shared_ptr px(static_cast(0));