7-10 模板语法的泛型lambda表达式(C++20)

7.10 模板语法的泛型lambda表达式

​ 原有的lambda表达式所支持的泛型,由于不能直接获取模板参数的类型,所以会导致很多不自然的用法:

#include <vector>
#include <queue>
template <typename T>
struct is_std_vector : std::false_type
{
};
template <typename T>
struct is_std_vector<std::vector<T>> : std::true_type
{
};
auto f = [](auto vector) //判断是否是vector类型
{
static_assert(is_std_vector<decltype(vector)>::value, ""); //奇怪的用法
};

int main(int argc, char const *argv[])
{
f(std::vector<int>());
//f(std::queue<int>()); //编译不通过
return 0;
}

​ 因此,出现了下面的模板语法的泛型lambda表达式:

auto f = []<typename T>(std::vector<T> t){};