【发布时间】:2015-03-05 04:43:21
【问题描述】:
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 的隐式实例化吗?如果是这样,使用什么模板参数来实例化这些成员类?
【问题讨论】:
-
它们不是成员类。它们是成员模板。
-
我不相信这是类模板专业化的实例化,除非我的标准语言被混淆了。此外,无论如何,成员类都不会被实例化。
-
@T.C.你是对的,但目前还不清楚我们如何实例化一个成员类。我想,当我们定义该类的变量时,该类正在被实例化。例如,在this 示例中,将实例化哪个类?
-
在这种情况下,它会实例化
A<int>::Y和A<int>::U的声明(就像前向声明一样),而不是定义。 -
@T.C. “实例化声明”是什么意思?标准是否明确定义了该概念?我找不到它,搜索“实例化声明”。