如果N3797::14.7.1/1 [temp.inst]
除非已明确表示类模板特化 实例化(14.7.2)或明确专门化(14.7.3),类 模板特化是在隐式实例化的时候 在需要a的上下文中引用特化 完全定义的对象类型或类的完整性 type会影响程序的语义。
让我举一个例子,当不需要上下文时,类类型是完全定义的:
#include <iostream>
template<class T>
struct A
{
void foo();
};
template<class T> void A<T>::foo(){ std::cout << "foo" << std::endl; }
A<int>* a;
int main(){ a -> foo(); }
在该示例中,类模板既未明确也未隐式实例化。所以,我们实际上没有类A<int>
的定义。但尽管事实上它运作良好。你无法解释这种行为。
答案 0 :(得分:0)
请参阅14.7.1/4上的示例,该示例演示a -> foo();
是“需要完全定义的对象类型的上下文”。
答案 1 :(得分:0)
[expr.ref] / p2,强调我的:
对于第二个选项(箭头),第一个表达式应具有指针 完成类类型。
为什么你认为它是一个不需要完全定义的对象类型的上下文?