type_with_alignment_test.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 113 行

CPP
113
字号
//  (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)#include "test.hpp"#include "check_integral_constant.hpp"#ifdef TEST_STD#  include <type_traits>#else#  include <boost/type_traits/alignment_of.hpp>#  include <boost/type_traits/type_with_alignment.hpp>#  include <boost/type_traits/is_pod.hpp>#endif#if defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))#if (_MSC_VER >= 1400) && defined(_M_IX86)#include <xmmintrin.h>#endifstruct __declspec(align(8)) a8 { char m[8]; };struct __declspec(align(16)) a16 { char m[16]; };struct __declspec(align(32)) a32 { char m[32]; };struct __declspec(align(64)) a64 { char m[64]; };struct __declspec(align(128)) a128 { char m[128]; };#endifvoid check_call2(...){}template <class T>void check_call(const T& v){   check_call2(v);}#define TYPE_WITH_ALIGNMENT_TEST(T)\{\std::cout << "\ntesting type " << typeid(T).name() << std::endl;\std::cout << "Alignment of T is " << ::tt::alignment_of< T >::value << std::endl;\std::cout << "Aligned type is " << typeid(::tt::type_with_alignment< ::tt::alignment_of< T >::value>::type).name() << std::endl;\std::cout << "Alignment of aligned type is " << ::tt::alignment_of<\   ::tt::type_with_alignment<\      ::tt::alignment_of< T >::value\   >::type\>::value << std::endl;\BOOST_CHECK(::tt::alignment_of<\               ::tt::type_with_alignment<\                  ::tt::alignment_of< T >::value\               >::type\            >::value == ::boost::alignment_of< T >::value);\BOOST_CHECK(::tt::is_pod<\               ::tt::type_with_alignment<\                  ::tt::alignment_of< T >::value>::type\            >::value);\}#define TYPE_WITH_ALIGNMENT_TEST_EX(T)\   TYPE_WITH_ALIGNMENT_TEST(T)\{\   ::tt::type_with_alignment<\      ::tt::alignment_of< T >::value\   >::type val;\   check_call(val);\}TT_TEST_BEGIN(type_with_alignment)TYPE_WITH_ALIGNMENT_TEST_EX(char)TYPE_WITH_ALIGNMENT_TEST_EX(short)TYPE_WITH_ALIGNMENT_TEST_EX(int)TYPE_WITH_ALIGNMENT_TEST_EX(long)TYPE_WITH_ALIGNMENT_TEST_EX(float)TYPE_WITH_ALIGNMENT_TEST_EX(double)TYPE_WITH_ALIGNMENT_TEST_EX(long double)#ifdef BOOST_HAS_LONG_LONGTYPE_WITH_ALIGNMENT_TEST_EX(::boost::long_long_type)#endif#ifdef BOOST_HAS_MS_INT64TYPE_WITH_ALIGNMENT_TEST_EX(__int64)#endifTYPE_WITH_ALIGNMENT_TEST_EX(int[4])TYPE_WITH_ALIGNMENT_TEST_EX(int(*)(int))TYPE_WITH_ALIGNMENT_TEST_EX(int*)TYPE_WITH_ALIGNMENT_TEST_EX(VB)TYPE_WITH_ALIGNMENT_TEST_EX(VD)TYPE_WITH_ALIGNMENT_TEST_EX(enum_UDT)TYPE_WITH_ALIGNMENT_TEST_EX(mf2)TYPE_WITH_ALIGNMENT_TEST_EX(POD_UDT)TYPE_WITH_ALIGNMENT_TEST_EX(empty_UDT)TYPE_WITH_ALIGNMENT_TEST_EX(union_UDT)#if defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))#if (_MSC_VER >= 1400) && defined(_M_IX86)TYPE_WITH_ALIGNMENT_TEST(__m128)TYPE_WITH_ALIGNMENT_TEST(__m64)#endifTYPE_WITH_ALIGNMENT_TEST(a8)TYPE_WITH_ALIGNMENT_TEST(a16)TYPE_WITH_ALIGNMENT_TEST(a32)#endifTT_TEST_END

⌨️ 快捷键说明

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