次のコードの場合:
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 の両方がコードを受け入れることに注意してください。