按类型访问 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++
使用它自己的标准库,它拒绝编译它。
根据标准(或至少 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++
使用它自己的标准库,它拒绝编译它。