You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ std::tuple引用类型转换编译失败,询问标准支持计划

关于std::tuple引用类型转换的C++标准支持疑问

在GCC 12.1.0版本中,下述代码里被注释的行无法通过编译:

#include <tuple>
#include <string>

int main() {
    std::tuple<int, std::string, float> tup {1, "aaa", 3.0f};

    // ERROR
    // std::tuple<int&, std::string&, float&> tup_ref (tup);

    // OK...
    std::tuple<int&, std::string&, float&> tup_ref (std::get<0>(tup), std::get<1>(tup), std::get<2>(tup));

    // ERROR
    // std::tuple<int&, const std::string&, float&> tup_ref2 (tup);

    // OK
    std::tuple<int&, const std::string&, float&> tup_ref2 (std::get<0>(tup), std::get<1>(tup), std::get<2>(tup));

    // ERROR
    // const std::tuple<int&, std::string&, float&> const_tup_ref (tup_ref2);

    // OK
    [[maybe_unused]] const std::tuple<int&, const std::string&, float&>& const_tup_ref (tup_ref2);

    // ERROR.. why? this is const reference, you can't mutate 1th std::string anyway
    // const std::tuple<int&, std::string&, float&>& const_tup_ref3 (tup_ref2);

    // OK
    [[maybe_unused]] const std::tuple<const int&, const std::string&, const float&>& const_tup_ref2 (tup_ref2);

}

针对std::tuple<Ts&&...>与std::tuple<Ts...>&&之间的转换,以及上述代码中涉及的不同引用限定的std::tuple之间的转换,我认为C没有合理的禁止理由,仅可能是暂未支持,想询问后续C标准是否有计划支持这些转换场景?


内容的提问来源于stack exchange,提问作者frozenca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:45:50