alignment_of.hpp

来自「CGAL is a collaborative effort of severa」· HPP 代码 · 共 101 行

HPP
101
字号
//  (C) Copyright John Maddock 2000.//  Use, modification and distribution are subject to 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/type_traits for most recent version including documentation.#ifndef BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED#define BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED#include "boost/config.hpp"#include <cstddef>// should be the last #include#include "boost/type_traits/detail/size_t_trait_def.hpp"#ifdef BOOST_MSVC#   pragma warning(push)#   pragma warning(disable: 4121) // alignment is sensitive to packing#endif#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)#pragma option push -Vx- -Ve-#endifnamespace boost {template <typename T> struct alignment_of;// get the alignment of some arbitrary type:namespace detail {template <typename T>struct alignment_of_hack{    char c;    T t;    alignment_of_hack();};template <unsigned A, unsigned S>struct alignment_logic{    BOOST_STATIC_CONSTANT(std::size_t, value = A < S ? A : S);};template< typename T >struct alignment_of_impl{    BOOST_STATIC_CONSTANT(std::size_t, value =        (::boost::detail::alignment_logic<            sizeof(detail::alignment_of_hack<T>) - sizeof(T),            sizeof(T)        >::value));};} // namespace detailBOOST_TT_AUX_SIZE_T_TRAIT_DEF1(alignment_of,T,::boost::detail::alignment_of_impl<T>::value)// references have to be treated specially, assume// that a reference is just a special pointer:#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONtemplate <typename T>struct alignment_of<T&>    : alignment_of<T*>{};#endif#ifdef __BORLANDC__// long double gives an incorrect value of 10 (!)// unless we do this...struct long_double_wrapper{ long double ld; };template<> struct alignment_of<long double>   : public alignment_of<long_double_wrapper>{};#endif// void has to be treated specially:BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void,0)#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONSBOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const,0)BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void volatile,0)BOOST_TT_AUX_SIZE_T_TRAIT_SPEC1(alignment_of,void const volatile,0)#endif} // namespace boost#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)#pragma option pop#endif#ifdef BOOST_MSVC#   pragma warning(pop)#endif#include "boost/type_traits/detail/size_t_trait_undef.hpp"#endif // BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED

⌨️ 快捷键说明

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