根据标准(或至少对优先选择),std::get for std::tuple应:
5-8)提取类型为T的元组t的元素,除非元组恰好有该类型的一个元素,否则无法编译。
因此,我将这句话解释为这段代码不编译:
std::tuple<int, int> my_record;
std::get<int>(my_record) = 10;因为存在两个相同的类型,所以我尝试按类型访问元组。然而,GCC an Clang都正确地编译了这段代码,并产生了修改第一个元素的效果。.
为什么?我是不是误解了引用上的句子?引用错了吗?GCC和Clang不尊重标准吗?
发布于 2021-07-12 07:56:43
看上去像GCC 11的漏洞,考虑归档吧。这是标准的重要部分。
您可以在Clang中看到它,因为在gcc.godbolt.org上默认使用GCC的标准库。如果添加-stdlib=libc++以使用它自己的标准库,则它拒绝编译它。
https://stackoverflow.com/questions/68343712
复制相似问题