将带有auto参数的lambda函数传递给另一个函数是否合法?我的意思是从c ++的角度来看是否合法,即c ++ 17。
我尝试使用LLVM 10.0.1版的clang进行编译,但是可以理解,但我理解在将lambda函数传递给“ sees”函数后,必须以某种方式推导出auto参数
#include <iostream>
template <typename Fn>
void apply(Fn&& fn) {
fn(std::string("string"));
fn(10);
fn(10.3);
}
int main(int argc, char const *argv[])
{
apply([](auto&& arg){
std::cout << arg << std::endl;
});
return 0;
}
输出为:
string
10
10.3
答案 0 :(得分:4)
通用lambda生成具有operator()
模板但本身不是模板的类的实例。因此,可以毫无问题地推断出该类类型。