NoS*_*tAl 9 c++ language-lawyer c++20
下面的代码编译所有3级主要的编译器没有任何问题(MSVC与接受的无效类似的代码中的错误,但这是无关的我的问题):
#include <iostream>
namespace Z{
struct Na{
struct Batman{
int x=47;
};
};
}
int main(){
using Na = Z::Na;
return Na::Na::Na::Na::Na::Na::Na::Batman{}.x;
}
Run Code Online (Sandbox Code Playgroud)
这背后是否有任何逻辑,或者它只是一个奇怪的边缘情况,在应用为“正常”用途制定的规则时最终是合法的?
如果我的困惑不清楚:我希望奇怪的行被解析为
std::std::std和被拒绝Na::Na)的引用,然后在::Na遇到以下情况时被拒绝