В то время как краткость действительно является преимуществом продажи лямбд, она не настолько важна, чтобы заменить потребность в последовательности. Это особенно актуально для функций, использующих шаблоны, поскольку их сложнее понять, чем функции, не относящиеся к языку шаблонов.
В частности, синтаксис шаблона для общих лямбд в первую очередь имеет узкую область видимости, то есть большинство лямбд может жить без него (фактически, приведенный вами пример является прекрасным примером того, чтобы не использовать его в качестве тела функции). не создает экземпляр T
или делает что-то сопоставимое). От P0428 (акцент мой):
Существует несколько ключевых причин, почему текущий синтаксис для определения общих лямбда-выражений считается недостаточным для автора. Суть этого в том, что некоторые вещи, которые можно легко сделать с помощью обычных функциональных шаблонов, требуют значительных скачков обручей для выполнения с обычными лямбдами или вообще не могут быть выполнены.
Общие лямбды с decltype
использованием в их теле, вероятно, будут наиболее видными клиентами новых функций. И замена decltype
/ decay_t
-критерии на <typename T>
кажется мне более приемлемой с точки зрения дополнительной типизации и краткости.