【发布时间】:2017-11-04 09:31:40
【问题描述】:
将std::min 传递给函数不会编译。我将 std::min 的 libcpp 声明复制到我的源文件中,它可以工作。
std 版本有什么问题? clang 和 gcc 也是如此。在 Godbolt 上测试:https://godbolt.org/g/zwRqUA
#include <thread>
#include <algorithm>
namespace mystd {
// declaration copied verbatim from std::min (libcpp 4.0)
template <class _Tp> inline constexpr const _Tp&
mymin(const _Tp& __a, const _Tp& __b)
{
return std::min(__a, __b);
}
}
int main()
{
std::thread thr1(std::min<int>, 2, 3); // compile error
std::thread thr2(mystd::mymin<int>, 2, 3); // works
return 0;
}
clang 和 gcc 的错误:
[x86-64 clang 5.0.0 #1] error: no matching constructor for initialization of 'std::thread'
[x86-64 gcc 7.2 #1] error: no matching function for call to 'std::thread::thread(<unresolved overloaded function type>, int, int)'
[x86-64 gcc 7.2 #1] note: couldn't deduce template parameter '_Callable'
【问题讨论】:
-
函数被一个模板参数重载。
-
您收到的错误消息在我看来已经告诉您出了什么问题。
-
请问是什么错误?
-
问题附加错误。
标签: c++ templates overloading overload-resolution