回答this question,我从GCC和Clang那里得到了一个惊人的错误:
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.
};
为什么声明显式特化需要隐式实例化?这是否与范围解析运算符的所有使用属于同一类别?
实例化模板以查找我理解的成员对象的声明,但是对于成员类,您可以检查该成员是否存在并且是一个没有实例化任何内容的类。 (你确实需要部分专业化解决方案。)
答案 0 :(得分:1)
经过反思,这是语言设计固有的缺陷和显性专业化的怪癖。没有实例化类模板及其所有成员声明,就无法将显式特化声明与成员声明匹配。
我不会提交缺陷报告,因为用例太小而无法担心,并且不会因为当前的实现诊断条件而咬人。