diff options
Diffstat (limited to 'boost/intrusive/detail/pointer_element.hpp')
-rw-r--r-- | boost/intrusive/detail/pointer_element.hpp | 168 |
1 files changed, 0 insertions, 168 deletions
diff --git a/boost/intrusive/detail/pointer_element.hpp b/boost/intrusive/detail/pointer_element.hpp deleted file mode 100644 index dd26e3cf0b..0000000000 --- a/boost/intrusive/detail/pointer_element.hpp +++ /dev/null @@ -1,168 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2014-2014. 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) -// -// See http://www.boost.org/libs/intrusive for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_INTRUSIVE_DETAIL_POINTER_ELEMENT_HPP -#define BOOST_INTRUSIVE_DETAIL_POINTER_ELEMENT_HPP - -#ifndef BOOST_CONFIG_HPP -# include <boost/config.hpp> -#endif - -#if defined(BOOST_HAS_PRAGMA_ONCE) -# pragma once -#endif - -#ifndef BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP -#include <boost/intrusive/detail/workaround.hpp> -#endif //BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP - -namespace boost { -namespace intrusive { -namespace detail{ - -////////////////////// -//struct first_param -////////////////////// - -template <typename T> struct first_param -{ typedef void type; }; - -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) - - template <template <typename, typename...> class TemplateClass, typename T, typename... Args> - struct first_param< TemplateClass<T, Args...> > - { - typedef T type; - }; - -#else //C++03 compilers - - template < template //0arg - <class - > class TemplateClass, class T - > - struct first_param - < TemplateClass<T> > - { typedef T type; }; - - template < template //1arg - <class,class - > class TemplateClass, class T - , class P0> - struct first_param - < TemplateClass<T, P0> > - { typedef T type; }; - - template < template //2arg - <class,class,class - > class TemplateClass, class T - , class P0, class P1> - struct first_param - < TemplateClass<T, P0, P1> > - { typedef T type; }; - - template < template //3arg - <class,class,class,class - > class TemplateClass, class T - , class P0, class P1, class P2> - struct first_param - < TemplateClass<T, P0, P1, P2> > - { typedef T type; }; - - template < template //4arg - <class,class,class,class,class - > class TemplateClass, class T - , class P0, class P1, class P2, class P3> - struct first_param - < TemplateClass<T, P0, P1, P2, P3> > - { typedef T type; }; - - template < template //5arg - <class,class,class,class,class,class - > class TemplateClass, class T - , class P0, class P1, class P2, class P3, class P4> - struct first_param - < TemplateClass<T, P0, P1, P2, P3, P4> > - { typedef T type; }; - - template < template //6arg - <class,class,class,class,class,class,class - > class TemplateClass, class T - , class P0, class P1, class P2, class P3, class P4, class P5> - struct first_param - < TemplateClass<T, P0, P1, P2, P3, P4, P5> > - { typedef T type; }; - - template < template //7arg - <class,class,class,class,class,class,class,class - > class TemplateClass, class T - , class P0, class P1, class P2, class P3, class P4, class P5, class P6> - struct first_param - < TemplateClass<T, P0, P1, P2, P3, P4, P5, P6> > - { typedef T type; }; - - template < template //8arg - <class,class,class,class,class,class,class,class,class - > class TemplateClass, class T - , class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7> - struct first_param - < TemplateClass<T, P0, P1, P2, P3, P4, P5, P6, P7> > - { typedef T type; }; - - template < template //9arg - <class,class,class,class,class,class,class,class,class,class - > class TemplateClass, class T - , class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> - struct first_param - < TemplateClass<T, P0, P1, P2, P3, P4, P5, P6, P7, P8> > - { typedef T type; }; - -#endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) - -template <typename T> -struct has_internal_pointer_element -{ - template <typename X> - static char test(int, typename X::element_type*); - - template <typename X> - static int test(...); - - static const bool value = (1 == sizeof(test<T>(0, 0))); -}; - -template<class Ptr, bool = has_internal_pointer_element<Ptr>::value> -struct pointer_element_impl -{ - typedef typename Ptr::element_type type; -}; - -template<class Ptr> -struct pointer_element_impl<Ptr, false> -{ - typedef typename boost::intrusive::detail::first_param<Ptr>::type type; -}; - -} //namespace detail{ - -template <typename Ptr> -struct pointer_element -{ - typedef typename ::boost::intrusive::detail::pointer_element_impl<Ptr>::type type; -}; - -template <typename T> -struct pointer_element<T*> -{ typedef T type; }; - -} //namespace container { -} //namespace boost { - -#endif // defined(BOOST_INTRUSIVE_DETAIL_POINTER_ELEMENT_HPP) |