使用模板参数将lambda隐式转换为std :: function无效

时间:2019-10-01 18:23:21

标签: c++ templates lambda std-function

为什么当std :: function在其签名中使用模板参数时,lambda不能隐式转换为std :: function?

编译良好:

template <typename T>
void testFunc(T t, std::function<void()> a) {
}

testFunc(1, [](){});

不编译:

template <typename T>
void testFunc(T t, std::function<void(T)> a) {
}

testFunc(1, [](int a){});
  

没有匹配功能可调用'testFunc'

     

候选模板被忽略:无法将'function'与'(/main.cpp:193:17)上的lambda相匹配

编译良好:

template <typename T>
void testFunc(T t, std::function<void(decltype(t))> a) {
}

testFunc(1, [](int a){});

0 个答案:

没有答案