]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/type_traits/test/type_with_alignment_test.cpp
2 // (C) Copyright John Maddock 2000.
3 // Use, modification and distribution are subject to the
4 // Boost Software License, Version 1.0. (See accompanying file
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 # include <type_traits>
10 # include <boost/type_traits/alignment_of.hpp>
11 # include <boost/type_traits/type_with_alignment.hpp>
12 # include <boost/type_traits/is_pod.hpp>
15 #include "check_integral_constant.hpp"
17 #if defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))
18 #if (_MSC_VER >= 1400) && defined(_M_IX86)
19 #include <xmmintrin.h>
21 struct __declspec(align(8)) a8
{ char m
[8]; };
22 struct __declspec(align(16)) a16
{ char m
[16]; };
23 struct __declspec(align(32)) a32
{ char m
[32]; };
24 struct __declspec(align(64)) a64
{ char m
[64]; };
25 struct __declspec(align(128)) a128
{ char m
[128]; };
29 #pragma warning(disable:4793) // vaarg function
32 void check_call2(...){}
35 void check_call(const T
& v
)
40 #define TYPE_WITH_ALIGNMENT_TEST(T)\
42 std::cout << "\ntesting type " << typeid(T).name() << std::endl;\
43 std::cout << "Alignment of T is " << ::tt::alignment_of< T >::value << std::endl;\
44 std::cout << "Aligned type is " << typeid(::tt::type_with_alignment< ::tt::alignment_of< T >::value>::type).name() << std::endl;\
45 std::cout << "Alignment of aligned type is " << ::tt::alignment_of<\
46 ::tt::type_with_alignment<\
47 ::tt::alignment_of< T >::value\
49 >::value << std::endl;\
50 BOOST_CHECK(::tt::alignment_of<\
51 ::tt::type_with_alignment<\
52 ::tt::alignment_of< T >::value\
54 >::value == ::boost::alignment_of< T >::value);\
55 BOOST_CHECK(::tt::is_pod<\
56 ::tt::type_with_alignment<\
57 ::tt::alignment_of< T >::value>::type\
60 #define TYPE_WITH_ALIGNMENT_TEST_EX(T)\
61 TYPE_WITH_ALIGNMENT_TEST(T)\
63 ::tt::type_with_alignment<\
64 ::tt::alignment_of< T >::value\
70 TT_TEST_BEGIN(type_with_alignment
)
72 TYPE_WITH_ALIGNMENT_TEST_EX(char)
73 TYPE_WITH_ALIGNMENT_TEST_EX(short)
74 TYPE_WITH_ALIGNMENT_TEST_EX(int)
75 TYPE_WITH_ALIGNMENT_TEST_EX(long)
76 TYPE_WITH_ALIGNMENT_TEST_EX(float)
77 TYPE_WITH_ALIGNMENT_TEST_EX(double)
78 TYPE_WITH_ALIGNMENT_TEST_EX(long double)
80 #ifdef BOOST_HAS_LONG_LONG
81 TYPE_WITH_ALIGNMENT_TEST_EX(::boost::long_long_type
)
83 #ifdef BOOST_HAS_MS_INT64
84 TYPE_WITH_ALIGNMENT_TEST_EX(__int64
)
86 TYPE_WITH_ALIGNMENT_TEST_EX(int[4])
87 TYPE_WITH_ALIGNMENT_TEST_EX(int(*)(int))
88 TYPE_WITH_ALIGNMENT_TEST_EX(int*)
89 TYPE_WITH_ALIGNMENT_TEST_EX(VB
)
90 TYPE_WITH_ALIGNMENT_TEST_EX(VD
)
91 TYPE_WITH_ALIGNMENT_TEST_EX(enum_UDT
)
92 TYPE_WITH_ALIGNMENT_TEST_EX(mf2
)
93 TYPE_WITH_ALIGNMENT_TEST_EX(POD_UDT
)
94 TYPE_WITH_ALIGNMENT_TEST_EX(empty_UDT
)
95 TYPE_WITH_ALIGNMENT_TEST_EX(union_UDT
)
97 #if defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))
98 #if (_MSC_VER >= 1400) && defined(_M_IX86)
99 TYPE_WITH_ALIGNMENT_TEST(__m128
)
100 TYPE_WITH_ALIGNMENT_TEST(__m64
)
102 TYPE_WITH_ALIGNMENT_TEST(a8
)
103 TYPE_WITH_ALIGNMENT_TEST(a16
)
104 TYPE_WITH_ALIGNMENT_TEST(a32
)