逗号运算符对齐

Comma Operator in alignas

此代码在 Visual Studio 2019

上编译并 运行 正常(输出 5)
#include <iostream>



int main(void) {

    alignas(2,3,9,8) int x=5;

    std::cout << x;


    return 0;
}

in C comma expressions are explicitly disallowed in alignas. This compiled fine here. I changed the order and placed 9 or 3 at the end (which is disallowed in alignas) 并且程序编译失败表明括号中的表达式确实被解析为逗号运算符。这里有不同的含义还是这只是 VS 允许程序员摆脱他们不应该做的事情。

alignment-specifier 需要包含 type-idconstant-expression ([dcl.attr]):

alignment-specifier:
    alignas ( type-id ...opt )
    alignas ( constant-expression ...opt )

并且 constant-expression 必须是 conditional-expression ([expr.const]):

constant-expression:
    conditional-expression

2,3,9,8 既不是 type-id (显然)也不是 constant-expression (因为逗号的优先级较低比条件运算符 ?:).

因此,alignas(2,3,9,8)是语法错误,应由符合标准的编译器诊断。