当值和错误类型均为平凡可复制时,std::expected是否应是平凡可复制的?
关于std::expected是否应为平凡可复制类型的疑问
当值和错误类型均为平凡可复制类型时,不同编译器对std::expected的平凡可复制性判定存在差异:
- GCC和Clang中的
std::expected不满足std::is_trivially_copyable_v - MSVC中的
std::expected满足std::is_trivially_copyable_v - 第三方实现
tl::expected在所有编译器上均被判定为平凡可复制
这是在从tl::expected迁移到std::expected时发现的问题,目前无法通过搜索明确C++标准规定的正确行为。
代码示例
// 在GCC、Clang和MSVC上均可通过 static_assert(std::is_trivially_copyable_v<tl::expected<int, int>>); // 仅在MSVC上可通过,在GCC和Clang上失败 static_assert(std::is_trivially_copyable_v<std::expected<int, int>>);
测试环境
通过Compiler Explorer进行测试,覆盖GCC、Clang、MSVC三种主流编译器。
内容的提问来源于stack exchange,提问作者RaitRaak
相关产品推荐
相关产品推荐

