提问人:ocirocir 提问时间:7/12/2021 更新时间:7/12/2021 访问量:117
在具有重复类型的 std::tuple 中按类型访问应产生编译错误
Access by type in std::tuple with duplicated types should produce compilation error
问:
根据标准(或至少是 cppreference),std::tuple 的 std::get 应:
5-8) 提取类型为 T 的元组 t 的元素,除非该元组正好有一个该类型的元素,否则无法编译。
所以我对这句话的解释是,这个代码不编译:
std::tuple<int, int> my_record;
std::get<int>(my_record) = 10;
因为存在两个相同的类型,我尝试按类型访问元组。但是,GCC 和 Clang 都正确地编译了此代码并产生了修改第一个元素的效果。
为什么?我是否误解了参考文献上的句子?引用错误吗?GCC 和 Clang 不尊重标准吗?
答:
4赞
HolyBlackCat
7/12/2021
#1
看起来像 GCC 11 错误,请考虑提交它。这是该标准的启示性部分。
你在 Clang 中看到它,因为 gcc.godbolt.org 它默认使用 GCC 的标准库。如果你添加使用它自己的标准库,它会拒绝编译它。-stdlib=libc++
评论
3赞
ocirocir
7/12/2021
提交的错误: gcc.gnu.org/bugzilla/show_bug.cgi?id=101427 ;)
评论