У меня острая необходимость в функции std::forward_as_tuple
, но я ограничен в использовании GCC 4.5.0 (я знаю, что это плохая ситуация, в которую можно ввязаться, но это решило бы много проблем для меня, поэтому, пожалуйста, сведите к минимуму смехотворные замечания). <tuple>
Заголовок не содержит функции (как и должно быть), поэтому мой вопрос:
Реализация проста:
template <typename... Elements>
/*constexpr*/ tuple<Elements&&...>
forward_as_tuple(Elements&&... args) /* noexcept */
{
return tuple<Elements&&...>(std::forward<Elements>(args)...);
}
Не знаю, в каком GCC он появляется. Согласно этот документ начиная с gcc 4.3, доступны различные шаблоны и ссылки на rvalue, поэтому он должен работать на вашем gcc 4.5 (надеюсь)
Это скрыто в каком-то другом заголовке? (Это уже было раньше, но это трудно определить.)
Что сложного в grep
?
<tuple>
заголовок не содержит функции (как и должно быть)
std::forward_as_tuple
изначально назывался std::pack_arguments
и был предложен в N3059 в марте 2010 года и впервые появился в рабочем проекте N3092. GCC 4.5.0 был выпущен в апреле 2010 года, когда чернила на этом черновом материале почти не высыхали.
Не стесняйтесь пробовать и использовать функции C ++ 11 в не поддерживаемом компиляторе, предшествующем C ++ 11, но немного несправедливо говорить, что он должен включать функции, которые даже не существовали, когда ветвь релиза была вырезана и готовилась к новый релиз!
Вам следует по крайней мере используйте GCC 4.5.4, использование dot-oh релиза просто напрашивается на неприятности, он будет полон новых ошибок, исправленных в более поздних выпусках 4.5.x (хотя он по-прежнему не включает forward_as_tuple
или же pack_arguments
они впервые появились в GCC 4.6)
Вы могли бы рассмотреть возможность использования boost::tuple
вместо этого, который пытается обеспечить полнофункциональную реализацию даже для старых компиляторов.