tml*_*len 7 c++ namespaces c++11 c++14
这似乎可以正确编译:
namespace A {
template<typename T>
struct S {};
namespace B {
using S = S<int>;
}
}
int main() {
using namespace A::B;
S s;
}
Run Code Online (Sandbox Code Playgroud)
即使在这一行using S = S<int>,第一个S是指A::B::S,而第二个S是指模板A::S。
这是标准的 C++ 吗?
的范围S从它的声明点开始,对于一个using声明,它在别名所指的类型标识 ( S<int>) 之后。
所以在声明里面,new 的作用域S还没有开始,S仍然指向A::S.
根据https://en.cppreference.com/w/cpp/language/scope#Point_of_declaration。