接听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.
};
为什么声明显式特化需要隐式实例化?这是否与范围解析运算符的所有用途属于同一类别?
实例化模板以查找成员对象的声明我会理解,但在成员类的情况下,您可以检查成员是否存在并且是一个类,而无需实例化任何东西。 (不过,您确实需要部分特化解决方案。)
最佳答案
仔细想想,这是语言设计固有的缺陷,也是显式特化的怪癖。如果不实例化类模板及其所有成员声明,就无法将显式特化声明与成员声明相匹配。
我不会提交缺陷报告,因为用例太小而无需担心,也不会因为当前的实现诊断条件而不知不觉地咬人。
关于c++ - 显式特化导致实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110225/