7-11 可构造和可赋值的无状态的lambda表达式(C++20)

7.11 可构造和可赋值的无状态的lambda表达式

​ 在下面的应用场景里,因为需要的模板参数是类型,因此将lambda的类型传入时,由于会创建相应的对象,而lambda表达式的默认构造函数被删除了,因此在C++20前不能使用。

auto greater = [](auto x,auto y) { return x > y;};
std::map<std::string,int,decltype(greater)> mymap;

​ 同时,lambda表达式的拷贝构造函数也被删除了,因此下面的代码在C++20前也不能使用:

auto greater = [](auto x,auto y) { return x > y;};
std::map<std::string,int,decltype(greater)> mymap1, mymap2;
mymap1 = mymap2;

为了解决上面的问题,C++20标准允许了lambda表达式的复制和默认构造函数。