类成员的使用声明应为成员声明 (C++2003)

Kir*_*lev 5 c++

第 7.3.3 段。C++2003 标准指出

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

这意味着以下给出了语法错误:

struct S1
{
    static int var1;
};

using S1::var1;
Run Code Online (Sandbox Code Playgroud)

虽然以下编译良好:

namespace N2
{
    int var2;
}

using N2::var2;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ben*_*igt 1

它不起作用的原因很简单,因为标准禁止它。s示例中要特别注意:

在此输入图像描述

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

auto& var = S1::var;
Run Code Online (Sandbox Code Playgroud)

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