Насколько я понимаю - общие лямбды преобразуются в объекты локальных структур структуры с шаблоном operator()
. Это делает общий лямбда очень мощным и простым в использовании инструментом. С другой стороны, можно создать структуры, вложенные в функцию, но, тем не менее, структура имеет шаблонный элемент, например:
#include <iostream>
int main() {
struct inner {
template <class T>
void operator()(T &&i) { }
};
return 0;
}
или сам шаблон:
int main() {
template <class T>
struct inner {
void operator()(T &&i) { }
};
return 0;
}
Компилятор похоже, имеет проблему с его компиляцией:
error: invalid declaration of member template in local class
и
error: a template declaration cannot appear at block scope
Я предполагаю, что проблема лежит в стандарте С++, чем в ошибке компилятора. Каковы причины, по которым лямбдам разрешено иметь шаблонные члены, а не локальные структуры?
Я нашел этот qustion, но я думаю, что ответ отчасти устарел (я не думаю, что это правда даже для С++ 11).