为什么 alignas() 不采用参数包?
Why isn't alignas() taking a parameter pack?
对齐说明符 (C++11 起)
指定类型或对象的对齐要求。
语法
alignas(表达式)
alignas( 类型-id )
alignas(包...)
alignas(expression)
必须是整数常量表达式,其计算结果为零,或者为对齐或扩展对齐的有效值。
相当于alignas(alignof(type))
相当于多个alignas说明符应用于同一个声明,一个用于参数包的每个成员,可以是类型参数包也可以是非类型参数包。
那么为什么下面的代码对 g++、clang 或 VC++ 不起作用?
struct alignas(1, 4) A {};
或
struct alignas(int, double) A {};
这是缺陷吗?
编辑
显然这适用于 g++ 8.2 而不是 clang++ 8.0 或 VC++ 19.20.27508.1 所以似乎是一个缺陷,编译器还没有赶上。
编辑
显然,运行 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)
。
对齐说明符 (C++11 起)
指定类型或对象的对齐要求。
语法
alignas(表达式)
alignas( 类型-id )
alignas(包...)
alignas(expression)
必须是整数常量表达式,其计算结果为零,或者为对齐或扩展对齐的有效值。相当于
alignas(alignof(type))
相当于多个alignas说明符应用于同一个声明,一个用于参数包的每个成员,可以是类型参数包也可以是非类型参数包。
那么为什么下面的代码对 g++、clang 或 VC++ 不起作用?
struct alignas(1, 4) A {};
或
struct alignas(int, double) A {};
这是缺陷吗?
编辑
显然这适用于 g++ 8.2 而不是 clang++ 8.0 或 VC++ 19.20.27508.1 所以似乎是一个缺陷,编译器还没有赶上。
编辑
显然,运行 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)
。