
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 – 类声明类头中的全局限定所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)