Я знаю это как открытие коробки Пандоры, но это не мешает мне беспокоить меня. Рассмотрим простой пример:
#include <type_traits>
template <auto>
struct Foo: std::false_type { };
template <>
struct Foo<[](){return 1;}()>:std::true_type { };
int main() {
static_assert(Foo<1>::value);
}
Я знаю, что lambdas нельзя объявить в неоценимом контексте, но, очевидно, это не так. Что еще более странное clang 5.0.0 (которое, я думаю, сначала частично поддерживает constexpr lambda) компилирует его.
Является ли это ошибкой компилятора или разрешит ли это С++ 17?