从父命名空间重载类型

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