下面的代碼編譯罰款模板類的靜態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',他會得到不同的編譯錯誤,因爲編譯器會嘗試解析靜態字段的遞歸模板調用... –