使用非参数模板实参调用 lambda

Des*_*ess 3 c++ lambda templates c++20

MSVC 2019 允许我定义这样的 lambda,其中模板参数未在参数列表中使用:

auto foo = []<bool B>() {
  return B;
};
Run Code Online (Sandbox Code Playgroud)

但是,当尝试像这样调用它时,它会给出语法错误?

foo<false>();
Run Code Online (Sandbox Code Playgroud)

使用非参数模板参数调用 lambda 的正确方法是什么?

son*_*yao 12

模板参数与lambdaoperator()一起使用。

(C++20 起) 如果 lambda 定义使用显式模板参数列表,则该模板参数列表与 operator() 一起使用。

您可以为 指定非类型模板参数operator(),以非正常风格调用 lambda,如下所示:

foo.operator()<false>();
Run Code Online (Sandbox Code Playgroud)