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

c – 类声明类头中的全局限定,第1张

概述我们发现类似于以下内容(不要问……): 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失败: g 我们发现类似于以下内容(不要问……):

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条.

总结

以上是内存溢出为你收集整理的c – 类声明类头中的全局限定全部内容,希望文章能够帮你解决c – 类声明类头中的全局限定所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1212908.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存