我迫切需要函数std::forward_as_tuple
,但仅限于使用GCC 4.5.0(我知道这是一个糟糕的情况,但是它会为我解决很多问题,所以请把讽刺的言论保持在最低限度。 <tuple>
标题似乎不包含该函数(应该如此),所以我的问题是:
答案 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_tuple
或pack_arguments
,它们首次出现在GCC 4.6)
您可以考虑使用boost::tuple
,它会尝试提供功能完整的实现,即使对于较旧的编译器也是如此。