G ++ 4.5.0中的std :: forward_as_tuple

时间:2012-12-18 03:38:27

标签: c++ c++11 tuples gcc4 perfect-forwarding

我迫切需要函数std::forward_as_tuple,但仅限于使用GCC 4.5.0(我知道这是一个糟糕的情况,但是它会为我解决很多问题,所以请把讽刺的言论保持在最低限度。 <tuple>标题似乎不包含该函数(应该如此),所以我的问题是:

  1. 是否隐藏在其他标题中? (这已经发生过,但很难确定。)
  2. 是否可以推出自己的实施?那就是:它是否可以用C ++ 11的部分实现 在GCC 4.5.0中实现?如果有人真的知道怎么做,那就是奖金。

2 个答案:

答案 0 :(得分:4)

实施很简单:

template <typename... Elements>
/*constexpr*/ tuple<Elements&&...>
forward_as_tuple(Elements&&... args) /* noexcept */
{
    return tuple<Elements&&...>(std::forward<Elements>(args)...);
}

不知道它出现在哪个GCC中。根据{{​​3}}变量模板和rvalue refs自gcc 4.3起可用,所以它应该适用于你的gcc 4.5(我希望)

答案 1 :(得分:1)

  

它隐藏在其他标题中吗? (这种情况以前发生过,但很难确定。)

grep有什么困难?

  

<tuple>标头似乎不包含该功能(应该如此)

std::forward_as_tuple最初名为std::pack_arguments,于2010年3月在N3059提出,并首次出现在N3092工作草案中。 GCC 4.5.0于2010年4月发布,当时该草稿上的墨水几乎不干。

在非维护的C ++ 11之前的编译器中尝试使用C ++ 11特性,但是说它应该包含在发布分支被删除时甚至不存在的功能,这有点不公平。为新版本做好准备!

你应该至少使用GCC 4.5.4,使用dot-oh版本只是要求麻烦,它将充满新的错误,这些错误在以后的4.5.x版本中得到修复(尽管它仍然不包括forward_as_tuplepack_arguments,它们首次出现在GCC 4.6)

您可以考虑使用boost::tuple,它会尝试提供功能完整的实现,即使对于较旧的编译器也是如此。