1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // type_traits 11 12 // aligned_union<size_t Len, class ...Types> 13 14 #include <type_traits> 15 16 int main() 17 { 18 #ifndef _LIBCPP_HAS_NO_VARIADICS 19 { 20 typedef std::aligned_union<10, char >::type T1; 21 #if _LIBCPP_STD_VER > 11 22 static_assert(std::is_same<std::aligned_union_t<10, char>, T1>::value, "" ); 23 #endif 24 static_assert(std::alignment_of<T1>::value == 1, ""); 25 static_assert(sizeof(T1) == 10, ""); 26 } 27 { 28 typedef std::aligned_union<10, short >::type T1; 29 #if _LIBCPP_STD_VER > 11 30 static_assert(std::is_same<std::aligned_union_t<10, short>, T1>::value, "" ); 31 #endif 32 static_assert(std::alignment_of<T1>::value == 2, ""); 33 static_assert(sizeof(T1) == 10, ""); 34 } 35 { 36 typedef std::aligned_union<10, int >::type T1; 37 #if _LIBCPP_STD_VER > 11 38 static_assert(std::is_same<std::aligned_union_t<10, int>, T1>::value, "" ); 39 #endif 40 static_assert(std::alignment_of<T1>::value == 4, ""); 41 static_assert(sizeof(T1) == 12, ""); 42 } 43 { 44 typedef std::aligned_union<10, double >::type T1; 45 #if _LIBCPP_STD_VER > 11 46 static_assert(std::is_same<std::aligned_union_t<10, double>, T1>::value, "" ); 47 #endif 48 static_assert(std::alignment_of<T1>::value == 8, ""); 49 static_assert(sizeof(T1) == 16, ""); 50 } 51 { 52 typedef std::aligned_union<10, short, char >::type T1; 53 #if _LIBCPP_STD_VER > 11 54 static_assert(std::is_same<std::aligned_union_t<10, short, char>, T1>::value, "" ); 55 #endif 56 static_assert(std::alignment_of<T1>::value == 2, ""); 57 static_assert(sizeof(T1) == 10, ""); 58 } 59 { 60 typedef std::aligned_union<10, char, short >::type T1; 61 #if _LIBCPP_STD_VER > 11 62 static_assert(std::is_same<std::aligned_union_t<10, char, short>, T1>::value, "" ); 63 #endif 64 static_assert(std::alignment_of<T1>::value == 2, ""); 65 static_assert(sizeof(T1) == 10, ""); 66 } 67 { 68 typedef std::aligned_union<2, int, char, short >::type T1; 69 #if _LIBCPP_STD_VER > 11 70 static_assert(std::is_same<std::aligned_union_t<2, int, char, short>, T1>::value, "" ); 71 #endif 72 static_assert(std::alignment_of<T1>::value == 4, ""); 73 static_assert(sizeof(T1) == 4, ""); 74 } 75 { 76 typedef std::aligned_union<2, char, int, short >::type T1; 77 #if _LIBCPP_STD_VER > 11 78 static_assert(std::is_same<std::aligned_union_t<2, char, int, short >, T1>::value, "" ); 79 #endif 80 static_assert(std::alignment_of<T1>::value == 4, ""); 81 static_assert(sizeof(T1) == 4, ""); 82 } 83 { 84 typedef std::aligned_union<2, char, short, int >::type T1; 85 #if _LIBCPP_STD_VER > 11 86 static_assert(std::is_same<std::aligned_union_t<2, char, short, int >, T1>::value, "" ); 87 #endif 88 static_assert(std::alignment_of<T1>::value == 4, ""); 89 static_assert(sizeof(T1) == 4, ""); 90 } 91 #endif 92 } 93