加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 类声明类头中的全局限定

发布时间:2020-12-16 09:27:35 所属栏目:百科 来源:网络整理
导读:我们发现类似于以下内容(不要问……): 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 qualificat
我们发现类似于以下内容(不要问……):

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

从附件A的C 03开始,在我看来,GCC是对的:

> class-head可以包含嵌套名称说明符和标识符
> nested-name-specifier不能以全局限定(::)开头
>显然,既不能识别

……还是我忽略了什么?

解决方法

我认为你做得对:GCC在这种情况下实现了标准,而其他人则不那么严格(看看 issue #355).

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

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

或者您使用显式命名的typedef

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

或者,当然,您交换使用命名空间和嵌套类定义的顺序.请注意,附件A仅供参考.规范性文本见第5.1 / 7和9条.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读