以下代码使用 Clang 编译并运行(在 13、14 和当前 git head 上测试),但不使用 GCC。
struct foo {
int field<0, 1, int, 3>;
};
Run Code Online (Sandbox Code Playgroud)
但我不明白它在声明什么:这个字段是什么?
int field<0, 1, int, 3>;
Run Code Online (Sandbox Code Playgroud)
我可以在field<>模板中放入我想要的任何内容(如果它甚至是模板?),例如field<0, 1, int, 3>编译和运行。但之后我无法访问它。
eer*_*ika 26
假设field不是已声明的模板,则该程序格式错误。
但我不明白它在声明什么:这个字段是什么?
铿锵 AST 说:
`-CXXRecordDecl 0xdb6f20 <test.cpp:1:1, line:3:1> line:1:8 struct foo definition
`-FieldDecl 0xdb7168 <line:2:3> col:7 'int'
Run Code Online (Sandbox Code Playgroud)
Clang AST 用于具有以下内容的程序int field;:
`-CXXRecordDecl 0x168af90 <test2.cpp:1:1, line:3:1> line:1:8 struct foo definition
`-FieldDecl 0x168b150 <line:2:3, col:7> col:7 field 'int'
Run Code Online (Sandbox Code Playgroud)
因此,看起来 Clang 认为int正在声明一个字段,但该字段的名称为空。这似乎通过初始化这个“未命名”字段得到了证实:
foo f{0}; // compiles in Clang
Run Code Online (Sandbox Code Playgroud)
第一个出现此错误的 Clang 版本似乎是 9:https ://gcc.godbolt.org/z/d386oz8v8
如果没有 的声明field,这甚至不是有效的语法: can\xe2\x80\x99t 开始模板参数列表,并且在成员声明<中不允许使用表达式。(如果有合适的声明,它可能是具有两种类型且没有变量的无效声明。)绝对可以诊断,并且绝对是 Clang bug。
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |