Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对句子的混淆;任何模板参数既没有推导也没有明确指定,模板参数推导失败。”;_C++_Templates_Language Lawyer - Fatal编程技术网

C++ 对句子的混淆;任何模板参数既没有推导也没有明确指定,模板参数推导失败。”;

C++ 对句子的混淆;任何模板参数既没有推导也没有明确指定,模板参数推导失败。”;,c++,templates,language-lawyer,C++,Templates,Language Lawyer,在某些情况下,使用一组类型p和a进行推断,在其他情况下,将有一组对应的类型p和a。对每个p/a对分别进行类型推断,然后组合推断出的模板参数值。如果无法对任何P/A对进行类型推断,或者如果对任何对进行类型推断会导致多个可能的推断值集,或者如果不同的对产生不同的推断值,或者如果任何模板参数未被推断或明确指定,则模板参数推断将失败 考虑上面的句子,模板参数属于谁?它是指类型P源自的模板的模板参数,还是指类型P命名的模板的模板参数?通过阅读这个句子,我无法确定它指的是哪一个 模板 结构测试{}; 模板

在某些情况下,使用一组类型p和a进行推断,在其他情况下,将有一组对应的类型p和a。对每个p/a对分别进行类型推断,然后组合推断出的模板参数值。如果无法对任何P/A对进行类型推断,或者如果对任何对进行类型推断会导致多个可能的推断值集,或者如果不同的对产生不同的推断值,或者如果任何模板参数未被推断或明确指定,则模板参数推断将失败

考虑上面的句子,
模板参数
属于谁?它是指类型
P
源自的模板的模板参数,还是指类型P命名的模板的模板参数?通过阅读这个句子,我无法确定它指的是哪一个

模板
结构测试{};
模板
void func(Test){}
int main(){
func(Test{});
}
问题1 换句话说,上面句子中的
模板参数
是指函数模板
func
或类模板
Test
的参数?两个模板都需要
模板参数
来形成专门化

问题2 如果
模板参数
引用类模板
测试
,即

对于P/A对,即
Test
/
Test
,该过程将
T
char
进行比较,然后
T
的推导值为
char
,因为
P
的模板参数列表中没有任何其他
Pi
,因此没有其他可推导的内容。对参与模板参数推导的每个
Pi
执行推导后,第二个模板参数
Test
保留无模板参数,其值既不是
推导的
也不是
明确指定的
,模板参数从
默认参数
中获取,因此,强调的段落不包括这种情况吗?(从默认参数获取意味着获取模板参数值的方法既不是通过推导,也不是明确指定的方法。那么扣减会失败吗?我认为它没有失败。如果我误解了什么是模板参数推断成功,请指出。

“…从使用中推断或从默认模板参数中获得”。如果模板参数是默认的模板参数,则它不能被扣除。@nicolai你的意思是[temp.Decrete]中的规则是对所有扣除规则的补充吗?@nicolai听起来好像适用于所有类型的扣除的替换,但是很清楚地说“任何模板参数都不会被推导或明确指定,也不会从默认参数获取,模板参数推导失败。”“,您同意吗?我认为默认模板参数不需要进行任何推断,因此我们不能说推断失败。@nicolai是的,
默认模板参数不需要进行任何推断
,因此模板参数既不进行推断,也不显式指定。”