xref: /aosp_15_r20/external/clang/test/SemaTemplate/alignas.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -verify %s
2*67e74705SXin Li 
3*67e74705SXin Li // expected-no-diagnostics
4*67e74705SXin Li using size_t = decltype(sizeof(0));
5*67e74705SXin Li 
6*67e74705SXin Li template<typename T, typename U>
max(T t,U u)7*67e74705SXin Li constexpr T max(T t, U u) { return t > u ? t : u; }
8*67e74705SXin Li 
9*67e74705SXin Li template<typename T, typename ...Ts>
max(T t,Ts...ts)10*67e74705SXin Li constexpr auto max(T t, Ts ...ts) -> decltype(max(t, max(ts...))) {
11*67e74705SXin Li   return max(t, max(ts...));
12*67e74705SXin Li }
13*67e74705SXin Li 
14*67e74705SXin Li template<typename...T> struct my_union {
15*67e74705SXin Li   alignas(T...) char buffer[max(sizeof(T)...)];
16*67e74705SXin Li };
17*67e74705SXin Li 
18*67e74705SXin Li struct alignas(8) A { char c; };
19*67e74705SXin Li struct alignas(4) B { short s; };
20*67e74705SXin Li struct C { char a[16]; };
21*67e74705SXin Li 
22*67e74705SXin Li static_assert(sizeof(my_union<A, B, C>) == 16, "");
23*67e74705SXin Li static_assert(alignof(my_union<A, B, C>) == 8, "");
24