// { dg-do compile { target c++11 } } //A few constexpr's constexpr int foo() { return __alignof__(int); } template constexpr int fooT() { return __alignof__(T); } template constexpr int fooN() { return N; } //Now the attributes //with normal variables, int a __attribute__((aligned(foo()))); int b __attribute__((aligned(fooT()))); int c __attribute__((aligned(fooN<__alignof__(int)>()))); //with variables inside a template, template void fun() { T a __attribute__((aligned(foo()))); T b __attribute__((aligned(fooT()))); T c __attribute__((aligned(fooN<__alignof__(T)>()))); T d __attribute__((aligned(fooT()))); T e __attribute__((aligned(fooN<__alignof__(int)>()))); } //instantiate it, void bar() { fun(); } //with classes struct __attribute__((aligned(foo()))) S0 { char dummy; }; S0 s0; struct __attribute__((aligned(fooT()))) S1 { char dummy; }; S1 s1; //and class templates template struct __attribute__((aligned(foo()))) S2 { char dummy; }; S2 s2; template struct __attribute__((aligned(fooT()))) S3 { char dummy; }; S3 s3;