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
相关产品推荐
相关产品推荐

