Общие знания диктуют, что лямбда-функции являются функторами под капотом.
В этом видео (@около 45:43) Бьярне говорит:
Я упомянул, что лямбда преобразуется в объект функции или в функцию, если удобная
Я вижу, как это оптимизация компилятора (т.е. это не меняет восприятие lambdas как неназванных функторов, что означает, что, например, lambdas все равно не будет перегружать), но существуют ли какие-либо правила, которые указывают, когда это применимо?
Изменить
То, как я понимаю термин переводить (и то, о чем я прошу) не имеет ничего общего с преобразованием (я не спрашиваю, можно ли конвертировать lambdas в функцию ptr и т.д.). По переводу я имею в виду "компилировать лямбда-выражения в функции вместо объектов-объектов".
Как упомянутый в cppreference: Выражение лямбда строит неназванный временный объект prvalue уникального неназванного неединичного неагрегатного типа, известного как тип закрытия.
Вопрос в следующем: может ли этот объект быть пропущенным и иметь вместо него обычную функцию? Если да, то когда и как?
Примечание. Я предполагаю, что одно из таких правил "не захватывает ничего", но я не могу найти надежных источников для подтверждения.