从父命名空间重载类型
Overloading type from parent namespace
这似乎编译正确:
namespace A {
template<typename T>
struct S {};
namespace B {
using S = S<int>;
}
}
int main() {
using namespace A::B;
S s;
}
即使在 using S = S<int>
行,第一个 S
引用 A::B::S
,而第二个 S
引用模板 A::S
。
这是标准的 C++ 吗?
S
的范围从它的 声明点 开始,对于 using
声明,它在别名所在的类型 ID 之后参考 (S<int>
).
所以在声明里面,新的S
的作用域还没有开始,S
仍然指的是A::S
。
根据https://en.cppreference.com/w/cpp/language/scope#Point_of_declaration。
这似乎编译正确:
namespace A {
template<typename T>
struct S {};
namespace B {
using S = S<int>;
}
}
int main() {
using namespace A::B;
S s;
}
即使在 using S = S<int>
行,第一个 S
引用 A::B::S
,而第二个 S
引用模板 A::S
。
这是标准的 C++ 吗?
S
的范围从它的 声明点 开始,对于 using
声明,它在别名所在的类型 ID 之后参考 (S<int>
).
所以在声明里面,新的S
的作用域还没有开始,S
仍然指的是A::S
。
根据https://en.cppreference.com/w/cpp/language/scope#Point_of_declaration。