Почему лямбда, переданная в качестве аргумента, может использоваться в константном выражении?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

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