明确的专业化导致实例化?

时间:2013-11-21 00:41:32

标签: c++ templates template-specialization

回答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.
};

为什么声明显式特化需要隐式实例化?这是否与范围解析运算符的所有使用属于同一类别?

实例化模板以查找我理解的成员对象的声明,但是对于成员类,您可以检查该成员是否存在并且是一个没有实例化任何内容的类。 (你确实需要部分专业化解决方案。)

1 个答案:

答案 0 :(得分:1)

经过反思,这是语言设计固有的缺陷和显性专业化的怪癖。没有实例化类模板及其所有成员声明,​​就无法将显式特化声明与成员声明匹配。

我不会提交缺陷报告,因为用例太小而无法担心,并且不会因为当前的实现诊断条件而咬人。