1 /////////////////////////////////////////////////////////////////////////////
\r
3 // (C) Copyright Ion GaztaƱaga 2006. Distributed under the Boost
\r
4 // Software License, Version 1.0. (See accompanying file
\r
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
\r
7 // See http://www.boost.org/libs/intrusive for documentation.
\r
9 /////////////////////////////////////////////////////////////////////////////
\r
11 #ifndef BOOST_INTRUSIVE_POINTER_TYPE_HPP
\r
12 #define BOOST_INTRUSIVE_POINTER_TYPE_HPP
\r
14 #include "config_begin.hpp"
\r
17 namespace intrusive {
\r
20 struct two {char _[2];};
\r
22 namespace pointer_type_imp
\r
25 template <class U> static two test(...);
\r
26 template <class U> static char test(typename U::pointer* = 0);
\r
28 } //namespace pointer_type_imp
\r
31 struct has_pointer_type
\r
33 static const bool value = sizeof(pointer_type_imp::test<T>(0)) == 1;
\r
36 template <class T, class A, bool = has_pointer_type<A>::value>
\r
39 typedef typename A::pointer type;
\r
42 template <class T, class A>
\r
43 struct pointer_type<T, A, false>
\r
48 } //namespace detail
\r
49 } //namespace intrusive
\r
50 } // namespace boost
\r
52 #include "config_end.hpp"
\r
54 #endif //#ifndef BOOST_INTRUSIVE_POINTER_TYPE_HPP
\r