按类型访问具有重复类型的 std::tuple 应该会产生编译错误

Ric*_*ico 5 c++ std c++14

根据标准(或至少cppreference), std::tuple 的 std::get 应:

5-8) 提取类型为 T 的元组 t 的元素。编译失败,除非元组正好有一个该类型的元素。

所以我解释这句话,使得这段代码不能编译:

std::tuple<int, int> my_record;
std::get<int>(my_record) = 10;
Run Code Online (Sandbox Code Playgroud)

因为存在两种相同的类型,我尝试按类型访问元组。但是,GCC 和 Clang 都正确编译了这段代码,并产生了修改第一个元素的效果

为什么?我是否误解了参考文献中的句子?引用错了吗?GCC 和 Clang 不尊重标准吗?

Hol*_*Cat 4

看起来像是 GCC 11 错误,请考虑将其归档。这是该标准的相关部分

您可以在 Clang 中看到它,因为在 gcc.godbolt.org 上它默认使用 GCC 的标准库。如果您添加-stdlib=libc++使用它自己的标准库,它会拒绝编译它。

  • 错误提交:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101427 ;) (3认同)