为什么不能编译器确定的std ::最大的模板与文字?(Why can't compiler

2019-10-21 07:07发布

无论铛也不是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_t0 ,喜欢它想如果我相比size_tint 。 然后,我推断,编译器可以计算出它的意义比较0size_t ,那么是什么阻止来自搞清楚,编译器max使用?

Answer 1:

std::max只有一个模板参数,用于这两个参数。 当你调用该函数没有明确指定这样的说法,它试图从两个参数推断出这一点,结束了size_t一个演绎和int为其他(因为这些类型的两个参数),不知道哪一个你要。

敢肯定你切断发生之后锵的错误消息的部分正好说的是,虽然。



Answer 2:

该litwral类型为int 。 模板匹配(T,T)不会做转换。



文章来源: Why can't compiler determine template of std::max with literal?