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 + -
显示快捷键?