1
接聽this question,我從GCC和鏘得到一個驚人的錯誤:顯式專精引發實例化?
template< typename = void >
struct Outer_temp
{
struct Inner;
Inner myinner;
};
template<>
struct Outer_temp<void>::Inner // Error: specialization of Outer_temp
{ // with member myinner of incomplete type.
};
爲什麼宣佈一個明確的專業化要求隱式實例?這是否與範圍解析運算符的所有用法屬於同一類?
實例化模板找到一個成員對象我會明白的聲明,但在成員類的情況下,可以檢查該成員存在,是沒有任何實例化一個類。 (您確實需要局部特殊化分辨率雖然)。
'Inner'不是模板。我認爲你在做什麼將會類似於'template struct Foo {int a; }; template <> double Foo :: a;'。你不能一個一個地改變任意的成員。你必須專門化整個模板。 –
@KerrekSB顯式特化允許逐個更改成員。 – Potatoswatter