summaryrefslogtreecommitdiff
path: root/boost/signals2/detail/foreign_ptr.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/signals2/detail/foreign_ptr.hpp')
-rw-r--r--boost/signals2/detail/foreign_ptr.hpp19
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
{