为什么被 C++20 `requires` 子句禁用的函数仍然会导致格式错误的类型错误?
使用 C++20 的 requires 语句,我注意到,如果该函数中的类型格式不正确,则使用 requires 有选择地禁用函数定义会中断 -即使该功能未启用。 我找到的…
完全匹配的默认比较运算符函数被删除的原因是什么?
考虑这个示例, struct C { bool operator<(const C&) const = default; // #1 }; int main(){ C c1,c2; auto r = c1 < c2; } GCC 和 Clang 报告候选 …
C++概念:无论返回类型是什么,检查方法/运算符是否存在
假设我正在编写一个模板函数,想要在其模板参数上调用 operator+= 并且不关心它是否返回新值(T 类型),一个 void,或者其他什么。例如: template v…
您能否为概念中的函子指定返回类型(尤其是 void 返回类型)?
我在 C++ 中使用高阶函数或修改函数的模板进行了大量工作 。函数修饰符是一种经常有用的模式。例如,我经常使用这个简单的挂钟基准: #include templa…
为什么 std::is_integral<__uint128_t> C++20 错误?
我正在尝试将遗留应用程序升级到 C++20,但遇到了一个错误,如果在 GCC 11.1.0 上没有 --std=c++20 则不会失败: static_assert(std::is_integral_v, …
更改私有模块片段是否会导致模块重新编译?
在 此页面上有关 C ++20模块特性,我发现了这样的说法: 借助私有模块片段,您可以在一个文件中实现一个模块,并使用 module :private; 声明其最后一…
非导出声明和私有模块片段中的声明有什么区别?
在 cppreference.com 关于模块 上,它提到了导出 : 模块接口单元可以导出声明和定义,这些声明和定义可以由其他翻译单元导入。 […] 给定命名模块在模…
C++20 协同例程可以无阻塞地实现同步接口吗?
我正在编写一个 GRPC 服务,并尝试在 Asio 的帮助下使用异步方法。该服务调用具有同步方法的 C++ 库。该库中的代码使用的接口必须由库的用户实现。这…
使用非类型模板参数的 C++20 概念对类模板进行完全专业化
我对 C++20 概念相当陌生,我正在尝试创建一个模板类 Foo ,该类具有基于非类型(枚举器)模板参数的完全专门化的实现。我已经使用下面的代码测试了我…
constexpr 上下文的灵活数组成员替换
我想要一个以大小/容量为前缀的对象数组。我的要求是: 数组元素应该按需构建,如 std::vector 。 该对象本身将被共享(即堆分配),因此使用 std::ve…
将可变参数包缩短为 N 种
我想编写一个大小为 N (> 0) 和可变数量参数 (>= N) 的类。它应该有一个接受 N 个参数的构造函数和一个具有相同类型的成员 std::tuple : template st…
捕获 lambda 并移动可分配值
我很困惑为什么捕获 lambda 不可移动分配,但它的手动定义(如带有operator()的结构)却可以。 考虑以下简化代码: struct Environment { Environment…
在文件系统路径处自动创建文件
即使路径中的中间元素不存在,原子在路径中创建文件的惯用方法是什么? 例如,给定一个如下所示的目录, $ tree one one ├── two └── three 我…
C++检查函数是否存在于容器类中的概念和隐式推导规则
我试图弄清楚如何做一些对我来说在概念和模板类型(如 std::vector)方面似乎很棘手的事情。 我正在尝试应用类似于我在 T 上使用 std::movable 的编译…