Geo*_*che 3 c++ standards class declaration
我们发现类似于以下内容(不要问......):
namespace N {
struct A { struct B; };
}
struct A { struct B; };
using namespace N;
struct ::A::B {}; // <- point of interest
Run Code Online (Sandbox Code Playgroud)
有趣的是,这与VS2005,icc 11.1和Comeau(在线)编译良好,但与GCC失败:
在'{'标记之前,类名的全局限定无效
从C++ 03,附件A,在我看来,像GCC是对的:
class-head可以由nested-name-specifier与identifiernested-name-specifier不能以全球资格开始(::)identifier......还是我忽略了什么?
我认为你做得对:GCC在这种情况下实现了标准,而其他人则不那么严格(看看问题#355).
您可以执行以下操作来解决语法限制
struct identity< ::A >::type::B {};
Run Code Online (Sandbox Code Playgroud)
或者您使用显式命名 typedef
typedef ::A AHidden;
struct AHidden::B { };
Run Code Online (Sandbox Code Playgroud)
或者,当然,您交换using namespace了嵌套类定义的顺序.请注意,附件A仅供参考.规范性文本在条款5.1/7和9.
| 归档时间: |
|
| 查看次数: |
915 次 |
| 最近记录: |