Код: Выделить всё
template
void func() {
(void)[]() consteval {
return []() {
return 0;
}.operator()();
}.template operator()();
}
template void func();
Код: Выделить всё
:4:16: error: cannot initialize object parameter of type 'const (lambda at :4:16)' with an expression of type '(lambda at :4:16)'
4 | return []() {
| ^~~~~~
5 | return 0;
| ~~~~~~~~~
6 | }.operator()();
| ~
:7:16: note: in instantiation of function template specialization 'func()::(anonymous class)::operator()' requested here
7 | }.template operator()();
| ^
:10:15: note: in instantiation of function template specialization 'func' requested here
10 | template void func();
| ^
1 error generated.
Compiler returned: 1
Некоторые изменения, каждое из которых приведет к компиляции:
- Превращение func в функцию без шаблона
- Удаление шаблона (и изменение оператора .template() просто .operator()) из внешнего лямбда
- Изменение внутренних лямбда-выражений .operator()() на просто ()
- Удаление константы
- Сохранение результата вызова внутренней лямбды в переменной и возврат этой переменной
- Сохранение внутренней лямбды в переменной и возврат результата вызова этой лямбды .operator()
Подробнее здесь: https://stackoverflow.com/questions/793 ... -templates
Мобильная версия