C++20 的奇怪 return 值需要表达式

Weird return value of C++20 requires expression

考虑需要表达式:

constexpr auto b = requires { []{}; };

GCC pass下面两个static_assert:

 static_assert(b);
 static_assert(!b); 

这看起来非常奇怪。我希望 b 的值应该是 true。这只是一个 GCC 错误吗?

这不是薛定谔的要求:b 显然应该是 truefalse

此处要求:

constexpr auto b = requires { []{}; };

是一个简单的要求。我们只是检查 expression []{} 是否是一个有效的表达式。而且……是!所以 b 应该是真的。这是一个 gcc 错误(StoryTeller's example 更是如此,表明拼写略有不同 b 甚至不算作常量表达式)。