c++ - 类(class)声明类(class)负责人的全局资格

标签 c++ class standards declaration

我们发现了类似以下内容(不要问...):

namespace N {
    struct A { struct B; };
}

struct A { struct B; };

using namespace N;

struct ::A::B {}; // <- point of interest

有趣的是,它可以在 VS2005、icc 11.1 和 Comeau(在线)上正常编译,但在 GCC 上会失败:

global qualification of class name is invalid before '{' token

从 C++03,附件 A,在我看来 GCC 是正确的:

  • class-head 可以由nested-name-specifieridentifier 组成
  • nested-name-specifier 不能以全局限定符 (::) 开头
  • 显然,identifier
  • 也不能

...还是我忽略了什么?

最佳答案

我认为您做对了:在这种情况下,GCC 严格按照标准执行,而其他人执行的标准不那么严格(请查看 issue #355)。

您可以执行以下操作来解决语法限制

struct identity< ::A >::type::B {}; 

或者你使用显式命名的 typedef

typedef ::A AHidden;
struct AHidden::B { };

或者,当然,您可以交换 using namespace 和嵌套类定义的顺序。请注意,附件 A 仅供引用。规范文本位于条款 5.1/79

关于c++ - 类(class)声明类(class)负责人的全局资格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781339/

相关文章:

c++ - 购物计算器

c++ - 从同一项目中的两个 C++ 文件调用同一头文件中的函数

c++ - 如何使用属性在 Tensorflow Lite 中添加自定义运算符

python - 在 python 中的两个对象之间的操作中,其操作重载为优先级?

class - Intellij IDEA如何运行一个类而不是整个项目?

javascript - 在类中使用 Ecmascript 6 箭头函数作为方法的正确方法是什么?

c++ - 使用空类类型对象的内存

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

c++ - 链接错误 - Eigen and Visual studio 2015

c++ - 我能保证 std::unique 会保留第一个元素吗?