【问题标题】:Overloading type from parent namespace从父命名空间重载类型
【发布时间】:2020-06-08 23:25:17
【问题描述】:

这似乎编译正确:

namespace A {
    template<typename T>
    struct S {};

    namespace B {
        using S = S<int>;
    }
}

int main() {
    using namespace A::B;
    S s;
}

即使在using S = S&lt;int&gt; 行,第一个S 引用A::B::S,而第二个S 引用模板A::S

这是标准的 C++ 吗?

【问题讨论】:

  • 添加了 language-lawyer 标签,因为这里看起来很相关

标签: c++ c++11 namespaces c++14


【解决方案1】:

S 的范围始于其声明点,对于using 声明,它位于别名所指的类型 ID (S&lt;int&gt;) 之后。 p>

所以在声明里面,新的S的作用域还没有开始,S还是指A::S

根据https://en.cppreference.com/w/cpp/language/scope#Point_of_declaration.

猜你喜欢
  • 2013-09-07
  • 2018-06-17
  • 2022-12-31
  • 2011-06-22
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 2020-11-24
  • 2015-10-19
相关资源
最近更新 更多