对类成员使用声明应该是成员声明(C ++ 2003)

时间:2012-06-20 18:50:04

标签: c++

第7.3.3段。 C ++ 2003标准规定

  

对类成员使用声明应为成员声明。

这意味着以下内容会出现语法错误:

struct S1
{
    static int var1;
};

using S1::var1;

虽然以下编辑很好:

namespace N2
{
    int var2;
}

using N2::var2;

有人知道背后的理由(如果有的话)吗?

更重要的是,标准给出了结构的静态数据成员的显式示例,并告诉它应该导致语法错误。 MS C ++给出了这个错误:

  

cpptest1.cxx(9):错误C2885:'S1 :: var1':在非类范围内不是有效的using声明

目前尚不清楚为什么要禁止这种行为。

1 个答案:

答案 0 :(得分:0)

它不起作用的原因仅仅是因为标准禁止它。请特别注意示例中的s

enter image description here

作为一种解决方法,您可以说:

auto& var = S1::var;

使标准(以及所有编译器)更复杂,以处理具有方便的解决方法的异常情况,但不通过成本效益测试。