C ++ 11 lambda表达式作为模板参数

时间:2016-07-11 15:58:21

标签: c++11 lambda

我见过很多使用lambda表达式作为模板参数的例子,但是当我在cppreference.com读取lambda函数的参考页面时, 它有这么短的句子:

  

除了函数体和函数的默认参数之外,未评估的表达式,模板参数,别名声明,typedef声明以及函数(或函数模板)声明中的任何位置都不允许使用Lambda表达式。

我很困惑,这句话错了还是我没理解错了?

1 个答案:

答案 0 :(得分:4)

你能做什么:

template <class>
struct Foo;

auto l = []{};
Foo<decltype(l)> f;

你不能做什么:

template <SomeType lambda>
struct Foo;

Foo<[]{}> f;

换句话说,lambda的类型与任何其他类型一样是普通类型,但lambda表达式本身不能用于专门化模板。这同样适用于未评估的上下文,例如decltypesizeof的操作数。

相关问题