根据cppreference.com
alignas说明符(自C++ 11起)
指定类型或对象的对齐要求。
句法
alignas(表达式)
alignas( type-id )
alignas( pack ... )
alignas(expression)
必须是整数常量表达式,其值为零,或者为比对或扩展比对的有效值。 alignas(alignof(type))
那么,为什么以下代码不适用于g++,clang或VC++?
struct alignas(1, 4) A {};
或者
struct alignas(int, double) A {};
这是缺陷吗?
编辑
显然,这适用于g++ 8.2,而不适用于clang++ 8.0或VC++ 19.20.27508.1,因此似乎是一个缺陷,并且编译器尚未 catch 。
编辑
显然,在cygwin bash shell中运行MinGW的g++编译器会导致奇怪的行为。在MinGW的bash shell中运行时效果很好。因此,不,这在g++ 8.2下也不起作用。
最佳答案
1, 4
或int, double
不是参数包。这将是在此上下文中使用的参数包的示例:
template <class... T>
struct Widget
{
struct alignas(T...) A {};
};
请注意,可以将多个
alignas
说明符应用于同一声明,因此您的示例可以分别写为alignas(1) alignas(4)
和alignas(int) alignas(double)
。