N4296::14.7.1/1 [temp.inst]告诉我们如下:
类模板专门化的隐式实例化导致声明的隐式实例化,而不是定义、.、成员类、.
那条规则是什么?让我举一个例子:
template<class T>
class A
{
public:
template<class W> class Y; //1, declaration
template<class V> class U{ V v; }; //2, definition
};
A<int> a; //3, implicit instantiation
int main(){ }//3的隐式实例化是否会导致//2和//1的隐式实例化?如果是,那么使用什么模板参数来实例化这些成员类?
发布于 2015-03-05 08:48:02
与“外部”模板相比,这些成员模板没有什么特别之处。编译器将它们读入声明,这样它就知道存在A<T>::Y<W>和A<T>::U<V>的名称,这与您为A类声明模板时非常相似:
template <typename T>
class A {
int a;
};它也只声明类A<T>的存在,但不实例化它。
实例化被推迟到实际使用模板类型(或显式实例化),这同样适用于成员模板。
https://stackoverflow.com/questions/28870175
复制相似问题