小编pon*_*ong的帖子

如果模板没有可变参数,则将Lambda推导为std :: function

template<typename ReturnT, typename... ParamT>
void foo(std::function<ReturnT(ParamT...)> callback)
{}

template<typename ReturnT, typename ParamT>
void bar(std::function<ReturnT(ParamT)> callback)
{}

main()
{    
    foo<int, int>([](int x){ return x; });  // no instance of function 
                                            //   template matches argument list
    bar<int, int>([](int x){ return x; });  // OK
}
Run Code Online (Sandbox Code Playgroud)

foobar之间的唯一区别是foo具有可变参数.不知何故,编译器能够将lambda转换为bar中的std :: function .

据我所知,模板类型推导不考虑类型转换.那么两个都不应该失败吗?

c++ c++11 visual-c++-2015

12
推荐指数
2
解决办法
324
查看次数

标签 统计

c++ ×1

c++11 ×1

visual-c++-2015 ×1