Почему нет функции-try-block для лямбда?

void foo() try {} catch (...) {}
// OK, function-try-block

[]() try {} catch (...) {} ();
// error: expected ‘{’ before ‘try’

[]() { try {} catch (...) {} } ();
// OK, extra curly braces`

Почему второй вариант не разрешен?

Ответы

Ответ 1

Первоначально были введены функции-try-blocks, чтобы улавливать исключения, создаваемые в конструкторах или деструкторах подобъектов. Синтаксис был расширен до обычных функций для согласованности.

Конечно, было бы возможно ввести такой синтаксис для лямбда. Однако, в отличие от конструкторов и деструкторов, нет практического преимущества перед простом включением try-блока в другую пару { }, за исключением того, что последнее выглядит намного менее неясным.