alignas.cpp 620 B

1234567891011121314151617181920212223
  1. // RUN: %clang_cc1 -std=c++11 -verify %s
  2. // expected-no-diagnostics
  3. using size_t = decltype(sizeof(0));
  4. template<typename T, typename U>
  5. constexpr T max(T t, U u) { return t > u ? t : u; }
  6. template<typename T, typename ...Ts>
  7. constexpr auto max(T t, Ts ...ts) -> decltype(max(t, max(ts...))) {
  8. return max(t, max(ts...));
  9. }
  10. template<typename...T> struct my_union {
  11. alignas(T...) char buffer[max(sizeof(T)...)];
  12. };
  13. struct alignas(8) A { char c; };
  14. struct alignas(4) B { short s; };
  15. struct C { char a[16]; };
  16. static_assert(sizeof(my_union<A, B, C>) == 16, "");
  17. static_assert(alignof(my_union<A, B, C>) == 8, "");