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

康桓瑋*_*康桓瑋 7 c++ lambda c++-concepts c++20

考虑需要表达式

constexpr auto b = requires { []{}; };
Run Code Online (Sandbox Code Playgroud)

GCC通过以下两个static_assert

 static_assert(b);
 static_assert(!b); 
Run Code Online (Sandbox Code Playgroud)

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

Bar*_*rry 3

这不是 Schr\xc3\xb6dinger\ 的要求:b显然应该是truefalse

\n

这里的要求:

\n
constexpr auto b = requires { []{}; };\n
Run Code Online (Sandbox Code Playgroud)\n

是一个简单的要求。我们只是检查表达式是否 []{}有效的表达式。而且……确实如此!所以b应该是真的。这是一个 gcc 错误(而且StoryTeller 的示例证明,在稍微不同的拼写中,b甚至不能算作常量表达式)。

\n