type_traits.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 167 行

HPP
167
字号
//////////////////////////////////////////////////////////////////////////////// (C) Copyright John Maddock 2000.// (C) Copyright Ion Gaztanaga 2005-2008.//// 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.//// The alignment_of implementation comes from John Maddock's boost::alignment_of code////////////////////////////////////////////////////////////////////////////////#ifndef BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP#define BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP#if (defined _MSC_VER) && (_MSC_VER >= 1200)#  pragma once#endif#include <boost/interprocess/detail/config_begin.hpp>namespace boost {namespace interprocess { namespace detail {struct nat{};//boost::alignment_of yields to 10K lines of preprocessed code, so we//need an alternativetemplate <typename T> struct alignment_of;template <typename T>struct alignment_of_hack{    char c;    T t;    alignment_of_hack();};template <unsigned A, unsigned S>struct alignment_logic{    enum{   value = A < S ? A : S  };};template< typename T >struct alignment_of{   enum{ value = alignment_logic            < sizeof(alignment_of_hack<T>) - sizeof(T)            , sizeof(T)>::value   };};//This is not standard, but should work with all compilersunion max_align{   char        char_;   short       short_;   int         int_;   long        long_;   #ifdef BOOST_HAS_LONG_LONG   long long   long_long_;   #endif   float       float_;   double      double_;   long double long_double_;   void *      void_ptr_;};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{   enum {  value = false   };};template<class T>struct is_reference<T&>{   enum {  value = true   };};template<class T>struct is_pointer{   enum {  value = false   };};template<class T>struct is_pointer<T*>{   enum {  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 <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));};} // namespace detail}  //namespace interprocess { }  //namespace boost {#endif   //#ifndef BOOST_INTERPROCESS_DETAIL_TYPE_TRAITS_HPP#include <boost/interprocess/detail/config_end.hpp>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?