C++ 11名称在一个类的完成范围内重新评估?

And*_*zos 5 c++ language-lawyer c++11

它在C++ 3.3.7.2 [basic.scope.class]中说

N类中使用的名称S应在其上下文中引用相同的声明,并在完成的范围内重新评估S.

什么是翻译单元的示例,其中N类中使用的名称S在其上下文中引用的是与在完成的范围内重新评估时不同的声明S

And*_*zos 1

struct X {};\nstruct Y {};\n\ntypedef X N;\n\nstruct S\n{\n    N n;\n    typedef Y N;\n};\n\n$ g++ test.cpp \n9:15: error: declaration of \xe2\x80\x98typedef struct Y S::N\xe2\x80\x99 [-fpermissive]\n4:11: error: changes meaning of \xe2\x80\x98N\xe2\x80\x99 from \xe2\x80\x98typedef struct X N\xe2\x80\x99 [-fpermissive]\n
Run Code Online (Sandbox Code Playgroud)\n