在这段代码中:
typedef int foo; struct S { foo foo; }; int main() {}
所有版本的clang -std=c++14
接受此代码,但所有版本的g++ -std=c++14
报告:
5 : error: declaration of 'foo S::foo' [-fpermissive] foo foo; ^ 1 : error: changes meaning of 'foo' from 'typedef int foo' [-fpermissive]
代码是否正确?
代码错了.typedef
是现有类型的新名称.因此,您无法创建类型名称foo foo;
等于的变量int int
.
g++ -std=c++14
是正确的.
也请参考这个问题