既不是 clang 也不是 gcc,编译这个:
#include <algorithm>
int main()
{
size_t t = 1;
t = std::max(t,0);
}
给出一些味道错误:
error: no matching function for call to 'max(size_t&,int)'
... note: template argument deduction/substitution failed:
如果我明确提供模板类型,它就会起作用:
#include <algorithm>
int main()
{
size_t t = 1;
t = std::max<size_t>(t,0);
}
这很令人困惑,因为如果我比较,两个编译器都不会抱怨警告size_t
to 0
,如果我比较的话就会这样size_t
to int
。然后我推断编译器可以发现比较是有意义的0
to size_t
,那么是什么阻止编译器找出哪个max
to use?
std::max
只有一个模板参数,用于两个参数。当您在没有显式指定该参数的情况下调用该函数时,它会尝试从两个参数中推导出它,最终得到size_t
一次扣除和int
对于另一个(因为这些是两个参数的类型)并且不知道你想要哪一个。
不过,可以肯定的是,Clang 的错误消息中你切断的地方之后的部分正是这样说的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)