Home | History | Annotate | Download | only in meta.trans.other
      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