相关疑难解决方法(0)

使用声明不能在功能范围内重复.这是为什么?

在[namespace.udecl]/10中,您有以下示例:

namespace A {
    int i;
}
namespace A1 {
    using A::i;
    using A::i; // OK: double declaration
}
void f() {
    using A::i;
    using A::i; // error: double declaration
}
Run Code Online (Sandbox Code Playgroud)

这个片段编译成clang.

c++ using-declaration language-lawyer c++14

18
推荐指数
1
解决办法
247
查看次数

与在GCC中使用声明编译相同范围内的类声明但不在MSVS中编译

以下程序是否符合c ++标准?

namespace X { class A; }

namespace Y { using X::A; class A {}; }

int main() {}
Run Code Online (Sandbox Code Playgroud)

我用不同的编译器得到了不同的结果:

  • gcc编译它没有错误.
  • visual c ++给出错误C2888:'X :: A':符号不能在命名空间'Y'中定义

我没有在我的程序违反的c ++标准中找到任何规则.

如果程序格式正确,为什么visual studio会出错?

如果程序格式不正确,那么c ++标准中的规则是否会违反,为什么gcc不会出错?

我不是想让我的程序编译.我只是想根据c ++标准找出它是否格式正确,以及为什么我测试的两个编译器表现不同.

c++ declaration using-declaration language-lawyer

5
推荐指数
1
解决办法
1063
查看次数