N4567 14.5.5.1 temp.class.spec.matchp4 在引用类模板专门化的类型名称中,参数列表应与主模板的模板参数列表匹配。专门化的模板参数是从主模板的参数.中推导出来的。
template<class T1, class T2, int I> class A { }; // #1
template<class T, int I> class A<T, T*, I> { }; // #2
A<int, int, 1> a1; // uses #1这个“推断”是否意味着14.8.2.5 temp.deduct.type?
模板参数可以在几种不同的上下文中推导,但在每种情况下,都会将以模板参数指定的类型(称为
P)与实际类型(称为A)进行比较,并试图找到模板参数值(类型参数的类型、非类型参数的值或模板参数的模板),在替换推导的值(称为A )之后,使P与A兼容。
如果是的话,P和A是什么?
专门化的模板参数意味着主模板 int, int, 1 或的实际模板参数,部分专门化 T, T*, I的模板参数或其他?
主模板的参数意味着主模板的实际模板参数int, int, 1 或主模板T1, T2, I的隐式模板参数或其他?
这句话是什么意思?
更新:
看起来伊戈尔·坦代尼克和@R·萨胡岛有不同的答案,我需要更多的帮助。
发布于 2015-12-31 22:30:39
给定模板及其专门化,使用:
A<int, int*, 1> a2;将使用专门化。
对于这种用法,
主模板的模板参数是int、int*和1。
模板专门化的模板参数是int和1。
专门化、int和1的参数是从主模板int、int*和1的参数中推导出来的。
在这种情况下,
P是int,int*和1。
A是专门化的。
我想这就是你想要的答案。
https://stackoverflow.com/questions/34552056
复制相似问题