【发布时间】:2021-05-02 02:25:30
【问题描述】:
我刚刚遇到了一个显式实例化模板化 lambda 的问题。下面的代码无法编译,但我不知道在这种情况下出了什么问题:
[&]<auto... II>(std::index_sequence<II...>) {
auto check = [&]<auto I>(){
};
(check<II>(),...);
}(std::make_index_sequence<N>{});
编译器错误(gcc 主干:11.0.0):
rswitch.cc: In lambda function:
rswitch.cc:42:28: error: expected primary-expression before ')' token
42 | (check<II>(),...);
| ^
rswitch.cc:42:26: error: binary expression in operand of fold-expression
42 | (check<II>(),...);
看来我必须像这样使用模板消歧:
[&]<auto... II>(std::index_sequence<II...>) {
auto check = [&]<auto I>(){
};
(this->template check<II>(),...);
}(std::make_index_sequence<N>{});
还有其他表达方式吗?
【问题讨论】:
-
您需要为
operator()指定模板值,而不是调用(check<II>(),...);:(check. template operator()<II>(),...);。 -
这不是显式的实例化,而是显式的模板参数。
标签: c++ templates lambda c++20