根据this page,类名可以是“可选的限定”。因此,我希望编译以下代码:
struct ::globalSt {};
在MSVC 2013u4中,我收到错误:
错误1错误C2039:'globalSt':不是'`global namespace''的成员
我是误解了引用还是MSVC错误?
答案 0 :(得分:4)
如果您使用限定名称定义类,则必须先声明该名称。 [类] / 11
如果 class-head-name 包含嵌套名称说明符, class-specifier 应引用一个类 先前直接在嵌套名称说明符引用的类或命名空间中声明,或者在 该命名空间的内联命名空间集(7.3.1)的元素(即,不仅仅是由...继承或引入 using-declaration ), class-specifier 应出现在封闭前一个声明的命名空间中。 在这种情况下,定义的 class-head-name 的嵌套名称说明符不应以 decltype说明符
答案 1 :(得分:1)
为了使这个工作,这个班必须已经被开除了。如果在定义之前在代码中的某处放置了struct globalst;
,它将正常工作。
例如,如果你这样做
struct MyStruct;
然后做
struct ::MyStruct {};
它应该编译。
使用MSVC 2013测试。