diff options
Diffstat (limited to 'src/third_party/boost-1.69.0/boost/interprocess/detail/type_traits.hpp')
-rw-r--r-- | src/third_party/boost-1.69.0/boost/interprocess/detail/type_traits.hpp | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/src/third_party/boost-1.69.0/boost/interprocess/detail/type_traits.hpp b/src/third_party/boost-1.69.0/boost/interprocess/detail/type_traits.hpp new file mode 100644 index 00000000000..5765c888e7c --- /dev/null +++ b/src/third_party/boost-1.69.0/boost/interprocess/detail/type_traits.hpp @@ -0,0 +1,162 @@ +////////////////////////////////////////////////////////////////////////////// +// (C) Copyright John Maddock 2000. +// (C) Copyright Ion Gaztanaga 2005-2012. +// +// 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/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP +#define BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP + +#ifndef BOOST_CONFIG_HPP +# include <boost/config.hpp> +#endif +# +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif + +#include <boost/interprocess/detail/config_begin.hpp> + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +struct nat{}; + +template<class T> +struct remove_reference +{ + typedef T type; +}; + +template<class T> +struct remove_reference<T&> +{ + typedef T type; +}; + +template<class T> +struct is_reference +{ + static const bool value = false; +}; + +template<class T> +struct is_reference<T&> +{ + static const bool value = true; +}; + +template<class T> +struct is_pointer +{ + static const bool value = false; +}; + +template<class T> +struct is_pointer<T*> +{ + static const bool value = true; +}; + +template <typename T> +struct add_reference +{ + typedef T& type; +}; + +template<class T> +struct add_reference<T&> +{ + typedef T& type; +}; + +template<> +struct add_reference<void> +{ + typedef nat &type; +}; + +template<> +struct add_reference<const void> +{ + typedef const nat &type; +}; + +template <class T> +struct add_const_reference +{ typedef const T &type; }; + +template <class T> +struct add_const_reference<T&> +{ typedef T& type; }; + +template<class T> +struct remove_const +{ + typedef T type; +}; + +template<class T> +struct remove_const<const T> +{ + typedef T type; +}; + +template<class T> +struct remove_volatile +{ + typedef T type; +}; + +template<class T> +struct remove_volatile<volatile T> +{ + typedef T type; +}; + +template<class T> +struct remove_const_volatile +{ + typedef typename remove_const<typename remove_volatile<T>::type>::type type; +}; + +template <typename T, typename U> +struct is_same +{ + typedef char yes_type; + struct no_type + { + char padding[8]; + }; + + template <typename V> + static yes_type is_same_tester(V*, V*); + static no_type is_same_tester(...); + + static T *t; + static U *u; + + static const bool value = sizeof(yes_type) == sizeof(is_same_tester(t,u)); +}; + +template<class T, class U> +struct is_cv_same +{ + static const bool value = is_same< typename remove_const_volatile<T>::type + , typename remove_const_volatile<U>::type >::value; +}; + +} // namespace ipcdetail +} //namespace interprocess { +} //namespace boost { + +#include <boost/interprocess/detail/config_end.hpp> + +#endif //#ifndef BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP |