std :: forward_as_tuple в G ++ 4.5.0

У меня острая необходимость в функции std::forward_as_tuple, но я ограничен в использовании GCC 4.5.0 (я знаю, что это плохая ситуация, в которую можно ввязаться, но это решило бы много проблем для меня, поэтому, пожалуйста, сведите к минимуму смехотворные замечания). <tuple> Заголовок не содержит функции (как и должно быть), поэтому мой вопрос:

  1. Это скрыто в каком-то другом заголовке? (Это уже было раньше, но это трудно определить.)
  2. Можно ли накатить собственную реализацию? То есть это реализуемо с частями c ++ 11, которые является реализован в GCC 4.5.0? Бонус, если кто-то действительно знает, как это сделать.

4

Решение

Реализация проста:

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 (надеюсь)

4

Другие решения

Это скрыто в каком-то другом заголовке? (Это уже было раньше, но это трудно определить.)

Что сложного в 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 вместо этого, который пытается обеспечить полнофункциональную реализацию даже для старых компиляторов.

1

По вопросам рекламы [email protected]