diff options
Diffstat (limited to 'boost/signals2/detail/foreign_ptr.hpp')
-rw-r--r-- | boost/signals2/detail/foreign_ptr.hpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/boost/signals2/detail/foreign_ptr.hpp b/boost/signals2/detail/foreign_ptr.hpp index 3e2357b8e8..47c5996205 100644 --- a/boost/signals2/detail/foreign_ptr.hpp +++ b/boost/signals2/detail/foreign_ptr.hpp @@ -18,12 +18,15 @@ #include <boost/smart_ptr/bad_weak_ptr.hpp> #include <boost/utility/swap.hpp> -#if !defined(BOOST_INTEL_STDCXX0X) -namespace std -{ - template<typename T> class shared_ptr; - template<typename T> class weak_ptr; -} +//FIXME: this is a hack to deal with the fact BOOST_NO_CXX_SMART_PTR doesn't +// exist yet in boost.config. It will fail on a library which implements +// C++11 std::tuple but not std::shared_ptr and std::weak_ptr. +#ifdef BOOST_NO_CXX11_HDR_TUPLE +#define BOOST_SIGNALS2_NO_CXX11_SMART_PTR +#endif + +#ifndef BOOST_SIGNALS2_NO_CXX11_SMART_PTR +#include <memory> #endif namespace boost @@ -39,10 +42,12 @@ namespace boost { typedef boost::shared_ptr<T> shared_type; }; +#ifndef BOOST_SIGNALS2_NO_CXX11_SMART_PTR template<typename T> struct weak_ptr_traits<std::weak_ptr<T> > { typedef std::shared_ptr<T> shared_type; }; +#endif template<typename SharedPtr> struct shared_ptr_traits {}; @@ -51,10 +56,12 @@ namespace boost { typedef boost::weak_ptr<T> weak_type; }; +#ifndef BOOST_SIGNALS2_NO_CXX11_SMART_PTR template<typename T> struct shared_ptr_traits<std::shared_ptr<T> > { typedef std::weak_ptr<T> weak_type; }; +#endif namespace detail { |