下面的代码编译罚款模板类的静态const成员变量VS静态常量成员变量的初始化
template<typename T>
struct foo
{
static const T value = 1 + foo::value;
};
但是这一个错误
struct foo
{
static const int value = 1 + foo::value;
};
也
template<typename T>
struct foo
{
static const int value = 1 + foo::value;
};
Error 1 error C2065: 'value' : undeclared identifier c:\visual studio 2013\projects\consoleapplication2\consoleapplication2\consoleapplication2.cpp 13 1 ConsoleApplication2
我认为第二种情况无论如何都是合理的
但第一个是它是如何工作的?
有人可以解释这一点吗?
我会补充说,如果OP真的调用'foo :: value',他会得到不同的编译错误,因为编译器会尝试解析静态字段的递归模板调用... –