Lambda 在各 C++ 版本的演进
C++11
虽然有了 auto 关键字,但是用起来还是需要 trailing return type 声明。
C++14
可以省略尾部声明(以下两种写法都是要 C++14 才能支持):
auto f() { return 42; } // #1
auto f() -> auto { return 42; } // #2,相当于 #1
Note
例外:在 C++23 explicit object parameter 可用之前,构造递归 lambda 时需要显式声明返回值类型,否则无法成功推导(或者先用 function 模板类存储起来,类型也就能从 function 中推导)。
同时 C++14 还支持 generic lambda,即使用 auto 作为函数参数的类型。
