我在另一個類模板中有一個類模板。內部類有一個靜態數據成員。我正在努力爲它提供一個定義。下面的例子作品在鐺3.8,但不是在GCC-7.1在模板類中定義模板類的靜態數據成員
template <typename T>
struct Out {
template <typename U>
struct In {
static int var;
};
};
template <typename T>
template <typename U>
int Out<T>::template In<U>::var;
GCC給出了錯誤:
error: template definition of non-template ‘int Out<T>::In<U>::var’
int Out<T>::template In<U>::var;
^~~
什麼是我必須做的,使GCC幸福嗎?
編輯:原來擺脫template
,使這項工作:
template <typename T>
template <typename U>
int Out<T>::In<U>::var;
仍然留下一個問題,是template
允許在這裏?
不僅允許,而且還需要。此時,編譯器不知道是否Out :: In是一個typename /成員/模板。它會猜測成員,並猜測你想要在 ::,這是一個錯誤。較新的gccs,如上所述,在這裏提供有用的診斷;之前,情況更糟。 –
lorro
@lorro我認爲這是必要的,你給的理由。我的困惑得到了證實 –