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

Access by type in std::tuple with duplicated types should produce compilation error

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

5-8) Extracts the element of the tuple t whose type is T. Fails to compile unless the tuple has exactly one element of that type.

所以我解释这句话使得这段代码无法编译:

std::tuple<int, int> my_record;
std::get<int>(my_record) = 10;

因为存在两个相同的类型,我尝试按类型访问元组。然而,both GCC an Clang correctly compile this code and produce the effect of modifying the first element.

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

看起来像是 GCC 11 错误,请考虑提交它。这是 revelant part of the standard.

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