【发布时间】:2011-06-01 20:52:05
【问题描述】:
如果我写这个程序:
#include <iostream>
namespace foo {
struct bar {
int x;
};
}
int main (void) {
struct foo::bar *a = new struct foo::bar;
delete a;
return 0;
}
并编译它:
g++ main.cxx -Wall -Wextra
它给了我这个警告:
main.cxx: In function ‘int main()’:
main.cxx:10:39: warning: declaration ‘struct foo::bar’ does not declare anything [enabled by default]
但是,如果我在 new 关键字之后取出 struct 关键字:
#include <iostream>
namespace foo {
struct bar {
int x;
};
}
int main (void) {
struct foo::bar *a = new foo::bar;
delete a;
return 0;
}
并以同样的方式编译它,g++ 不会输出任何警告。如果我使用 struct 关键字,为什么 g++ 会输出该警告?
【问题讨论】:
-
有趣的是,clang++ 和 comeau 都没有抱怨语法,粗略地看一下标准 (C++03) 也无助于理解问题。
-
因为这只是一个警告,所以我不敢说是错误——而是一个 GCC 错误?代码对我来说看起来不错。此外,它与命名空间相关——在没有命名空间的情况下做同样的事情不会产生警告。
标签: c++ namespaces struct g++ compiler-warnings