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

标签 c++ lambda c++20 c++-concepts

考虑 requires 表达式:

constexpr auto b = requires { []{}; };
海合会pass以下两个static_assert :
 static_assert(b);
 static_assert(!b); 
这看起来非常奇怪。我期望 b 的值应该是 true .这只是一个 GCC 错误吗?

最佳答案

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

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

关于c++ - C++20 的奇怪返回值需要表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66578966/

相关文章:

c++ - 通过在 constexpr 构造函数中传递 N 在编译时创建大小为 N 的数组

c++ - 用于各种 b 的稀疏带状 Ax=b 的批量 CUDA 解决方案

C# - 使用 lambda 表达式或 LINQ 填充列表

c++ - 可以构造一个空的 std::optional<T> 调用 T 的默认构造函数吗?

c++ - 在 C++20 中实现向后兼容概念的推荐方法

c++ - C++20 是否取消了类成员按升序排列的要求?

c++ - rethrow_exception 真的可以抛出相同的异常对象,而不是一个拷贝吗?

c++ - NEON:将 int8x16_t 解包为一对 int16x8 并将一对 int16x8_t 打包为 int8x16_t

Java lambda 表达式、转换和比较器

asp.net - jQuery lambda 函数