C++ 与模板中的定义相对应的声明

C++ 与模板中的定义相对应的声明,c++,templates,C++,Templates,N4296::14.7.1/1[temp.inst]提供了以下示例: template<class T, class U> struct Outer { template<class X, class Y> struct Inner; template<class Y> struct Inner<T, Y>; // #1a template<class Y> struct Inner<T, Y> {

N4296::14.7.1/1[temp.inst]
提供了以下示例:

template<class T, class U>
struct Outer {
    template<class X, class Y> struct Inner;
    template<class Y> struct Inner<T, Y>; // #1a
    template<class Y> struct Inner<T, Y> { }; // #1b; OK: valid redeclaration of #1a
    template<class Y> struct Inner<U, Y> { }; // #2
};
Outer<int, int> outer; // error at #2
模板
结构外部{
模板结构内部;
模板结构内部;/#1a
模板结构内部{};//#1b;OK:对#1a的有效重新声明
模板结构内部{};/#2
};
外部;//#2处的错误
并给出以下解释:

外部::内部
#1b
重新声明。(事实并非如此 定义为但与中的定义相关
Outer
#2
也是对
#1a
的重新说明。它被称为 与定义关联,因此该定义的重新声明无效 部分专业化


我感到困惑的是,
#1b
被视为声明,而不是定义。我们在这里明确地提供了函数体,为什么它还不是一个定义?事实上,你不能解释一下这个例子吗。

这个例子前面的文本已经解释过了

类模板专门化的隐式实例化导致类成员函数、成员类、作用域成员枚举、静态数据成员和成员模板的声明隐式实例化,而不是定义或默认参数的隐式实例化;它会导致非作用域成员枚举和成员匿名联合定义的隐式实例化。然而,为了根据9.2确定成员的实例化重新声明是否有效,与模板中的定义相对应的声明被视为无效声明 定义


实例化模板所产生的函数定义与函数模板本身的定义之间存在差异。

本示例前面的文本对此进行了解释

类模板专门化的隐式实例化导致类成员函数、成员类、作用域成员枚举、静态数据成员和成员模板的声明隐式实例化,而不是定义或默认参数的隐式实例化;它会导致非作用域成员枚举和成员匿名联合定义的隐式实例化。然而,为了根据9.2确定成员的实例化重新声明是否有效,与模板中的定义相对应的声明被视为无效声明 定义


实例化模板所产生的函数定义与函数模板本身的定义之间存在差异。

本示例前面的文本对此进行了解释

类模板专门化的隐式实例化导致类成员函数、成员类、作用域成员枚举、静态数据成员和成员模板的声明隐式实例化,而不是定义或默认参数的隐式实例化;它会导致非作用域成员枚举和成员匿名联合定义的隐式实例化。然而,为了根据9.2确定成员的实例化重新声明是否有效,与模板中的定义相对应的声明被视为无效声明 定义


实例化模板所产生的函数定义与函数模板本身的定义之间存在差异。

本示例前面的文本对此进行了解释

类模板专门化的隐式实例化导致类成员函数、成员类、作用域成员枚举、静态数据成员和成员模板的声明隐式实例化,而不是定义或默认参数的隐式实例化;它会导致非作用域成员枚举和成员匿名联合定义的隐式实例化。然而,为了根据9.2确定成员的实例化重新声明是否有效,与模板中的定义相对应的声明被视为无效声明 定义


实例化模板所产生的函数定义与函数模板本身的定义之间存在差异。

在其第一次声明中将名称引入其范围,然后将其与对象、函数或类等实体相关联。在某些作用域中,例如命名空间作用域或类作用域,可以多次声明名称。名称声明还可以包括命名实体的定义。在看到一个定义后,据说该声明与一个定义相关联。命名实体不允许有多个定义

隐式实例化类模板时,不会立即实例化其嵌套函数、类和静态对象成员的定义。它们只在需要时才被实例化。然而,有一个特殊的规则来捕捉潜在的定义冲突

在本例中,在具有两个参数
T
U
的类模板中,声明了具有两个参数
X
Y
的内部类模板。内部类定义了两个部分专门化,一个用于
X
T
重合的情况,另一个用于
X
U
重合的情况。第一个部分专门化首先在#1a处声明,然后在#1b处重新声明并与定义关联。第二个部分专门化被声明并与#2处的定义相关联

到目前为止还不错

但是如果
T
U
是同一类型,例如
int
,该怎么办?以这样的方式