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
显然应该是 true
或 false
。
此处要求:
constexpr auto b = requires { []{}; };
是一个简单的要求。我们只是检查 expression []{}
是否是一个有效的表达式。而且……是!所以 b
应该是真的。这是一个 gcc 错误(StoryTeller's example 更是如此,表明拼写略有不同 b
甚至不算作常量表达式)。
考虑需要表达式:
constexpr auto b = requires { []{}; };
GCC pass下面两个static_assert
:
static_assert(b);
static_assert(!b);
这看起来非常奇怪。我希望 b
的值应该是 true
。这只是一个 GCC 错误吗?
这不是薛定谔的要求:b
显然应该是 true
或 false
。
此处要求:
constexpr auto b = requires { []{}; };
是一个简单的要求。我们只是检查 expression []{}
是否是一个有效的表达式。而且……是!所以 b
应该是真的。这是一个 gcc 错误(StoryTeller's example 更是如此,表明拼写略有不同 b
甚至不算作常量表达式)。