libcxx

libcxx mirror with random patches
git clone https://git.neptards.moe/neptards/libcxx.git
Log | Files | Refs

aligned_union.pass.cpp (4150B)


      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 // UNSUPPORTED: c++98, c++03
     11 
     12 // type_traits
     13 
     14 // aligned_union<size_t Len, class ...Types>
     15 
     16 //  Issue 3034 added:
     17 //  The member typedef type shall be a trivial standard-layout type.
     18 
     19 #include <type_traits>
     20 
     21 #include "test_macros.h"
     22 
     23 int main()
     24 {
     25     {
     26     typedef std::aligned_union<10, char >::type T1;
     27 #if TEST_STD_VER > 11
     28     static_assert(std::is_same<std::aligned_union_t<10, char>, T1>::value, "" );
     29 #endif
     30     static_assert(std::is_trivial<T1>::value, "");
     31     static_assert(std::is_standard_layout<T1>::value, "");
     32     static_assert(std::alignment_of<T1>::value == 1, "");
     33     static_assert(sizeof(T1) == 10, "");
     34     }
     35     {
     36     typedef std::aligned_union<10, short >::type T1;
     37 #if TEST_STD_VER > 11
     38     static_assert(std::is_same<std::aligned_union_t<10, short>, T1>::value, "" );
     39 #endif
     40     static_assert(std::is_trivial<T1>::value, "");
     41     static_assert(std::is_standard_layout<T1>::value, "");
     42     static_assert(std::alignment_of<T1>::value == 2, "");
     43     static_assert(sizeof(T1) == 10, "");
     44     }
     45     {
     46     typedef std::aligned_union<10, int >::type T1;
     47 #if TEST_STD_VER > 11
     48     static_assert(std::is_same<std::aligned_union_t<10, int>, T1>::value, "" );
     49 #endif
     50     static_assert(std::is_trivial<T1>::value, "");
     51     static_assert(std::is_standard_layout<T1>::value, "");
     52     static_assert(std::alignment_of<T1>::value == 4, "");
     53     static_assert(sizeof(T1) == 12, "");
     54     }
     55     {
     56     typedef std::aligned_union<10, double >::type T1;
     57 #if TEST_STD_VER > 11
     58     static_assert(std::is_same<std::aligned_union_t<10, double>, T1>::value, "" );
     59 #endif
     60     static_assert(std::is_trivial<T1>::value, "");
     61     static_assert(std::is_standard_layout<T1>::value, "");
     62     static_assert(std::alignment_of<T1>::value == 8, "");
     63     static_assert(sizeof(T1) == 16, "");
     64     }
     65     {
     66     typedef std::aligned_union<10, short, char >::type T1;
     67 #if TEST_STD_VER > 11
     68     static_assert(std::is_same<std::aligned_union_t<10, short, char>, T1>::value, "" );
     69 #endif
     70     static_assert(std::is_trivial<T1>::value, "");
     71     static_assert(std::is_standard_layout<T1>::value, "");
     72     static_assert(std::alignment_of<T1>::value == 2, "");
     73     static_assert(sizeof(T1) == 10, "");
     74     }
     75     {
     76     typedef std::aligned_union<10, char, short >::type T1;
     77 #if TEST_STD_VER > 11
     78     static_assert(std::is_same<std::aligned_union_t<10, char, short>, T1>::value, "" );
     79 #endif
     80     static_assert(std::is_trivial<T1>::value, "");
     81     static_assert(std::is_standard_layout<T1>::value, "");
     82     static_assert(std::alignment_of<T1>::value == 2, "");
     83     static_assert(sizeof(T1) == 10, "");
     84     }
     85     {
     86     typedef std::aligned_union<2, int, char, short >::type T1;
     87 #if TEST_STD_VER > 11
     88     static_assert(std::is_same<std::aligned_union_t<2, int, char, short>, T1>::value, "" );
     89 #endif
     90     static_assert(std::is_trivial<T1>::value, "");
     91     static_assert(std::is_standard_layout<T1>::value, "");
     92     static_assert(std::alignment_of<T1>::value == 4, "");
     93     static_assert(sizeof(T1) == 4, "");
     94     }
     95     {
     96     typedef std::aligned_union<2, char, int, short >::type T1;
     97 #if TEST_STD_VER > 11
     98     static_assert(std::is_same<std::aligned_union_t<2, char, int, short >, T1>::value, "" );
     99 #endif
    100     static_assert(std::is_trivial<T1>::value, "");
    101     static_assert(std::is_standard_layout<T1>::value, "");
    102     static_assert(std::alignment_of<T1>::value == 4, "");
    103     static_assert(sizeof(T1) == 4, "");
    104     }
    105     {
    106     typedef std::aligned_union<2, char, short, int >::type T1;
    107 #if TEST_STD_VER > 11
    108     static_assert(std::is_same<std::aligned_union_t<2, char, short, int >, T1>::value, "" );
    109 #endif
    110     static_assert(std::is_trivial<T1>::value, "");
    111     static_assert(std::is_standard_layout<T1>::value, "");
    112     static_assert(std::alignment_of<T1>::value == 4, "");
    113     static_assert(sizeof(T1) == 4, "");
    114     }
    115 }