第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声明
目前尚不清楚为什么要禁止这种行为。
答案 0 :(得分:0)
它不起作用的原因仅仅是因为标准禁止它。请特别注意示例中的s
:
作为一种解决方法,您可以说:
auto& var = S1::var;
使标准(以及所有编译器)更复杂,以处理具有方便的解决方法的异常情况,但不通过成本效益测试。