GCC对非静态数据成员的[[maybe_unused]]属性误报忽略警告?
GCC对
[[maybe_unused]]应用于非静态数据成员的警告问题 先看你提供的测试代码:
struct Foo { [[maybe_unused]] int member = 1; void bar() { [[maybe_unused]] int local = 0; } }; int main(int argc, char* argv[]) { Foo f{}; f.bar(); return 0; }
正如你所说,这段代码在不同编译器上表现不一致:
- GCC会抛出一个警告,但Clang和MSVC完全正常:
warning: 'maybe_unused' attribute ignored [-Wattributes] [[maybe_unused]] int member = 1;
再对照C++标准的明确规定:
10.6.7 Maybe unused attribute [dcl.attr.unused]
...
2. 该属性可应用于类、typedef名、变量、非静态数据成员、函数、枚举或枚举器的声明。
...
标准白纸黑字写了允许把[[maybe_unused]]用在非静态数据成员上,所以你的判断完全正确——这种用法是合法的,GCC的警告确实是不合理的。
我个人倾向于这就是GCC的一个实现bug,毕竟另外两家主流编译器都能正确处理这个场景。你可以去GCC的bug系统里搜搜看,说不定已经有人报过这个问题了;如果没有的话,提交一份bug报告是很合适的,有助于他们修复这个问题。
内容的提问来源于stack exchange,提问作者0x5453
相关产品推荐
相关产品推荐

