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