对于以下代码:
struct foo {};
struct A
{
typedef foo foo_type;
void foo();
};
GCC 给出一个编译器错误:
test.cpp:7:14: error: declaration of 'void A::foo()' [-fpermissive]
void foo();
^
test.cpp:1:8: error: changes meaning of 'foo' from 'struct foo' [-fpermissive]
struct foo {};
^
但是 clang 接受它而没有编译器错误。谁是对的?
请注意,如果 typedef 被删除或更改为typedef ::foo foo_type
,则 gcc 和 clang 都接受该代码。