Почему лямбда, переданная в качестве аргумента, может использоваться в константном выражении?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему лямбда, переданная в качестве аргумента, может использоваться в константном выражении?

Сообщение Anonymous »

Почему этот код компилируется?

Код: Выделить всё

template
int foo(Callable callable)
{
static_assert(callable());
return 0;
}

static const auto r = foo([] { return true; });
Пример Compiler Explorer
Разве не запрещено использовать параметр функции в константном выражении (static_assert)?
Это запрещено для структурных типов, но кажется приемлемым для лямбда-выражений, как только они передаются по значению.
Все gcc, clang и msvc принимают его, так что это может быть каким-то образом законно. Я просто не могу найти никаких ссылок, почему это действительно.

Подробнее здесь: https://stackoverflow.com/questions/797 ... expression
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»