В нижеследующих описаниях функций элементы пакета параметровXTypes обозначаются по порядку с помощьюXi fori in[0, sizeof...(XTypes)) , где индексирование начинается с нуля.
template<class... TTypes>
constexpr tuple<VTypes...> make_tuple(TTypes&&... t);
ПакетVTypes определяется следующим образом. ПустьUi будетdecay_t<Ti> для каждого Ti вTTypes. ЕслиUi - это специализация reference_wrapper, тоVi вVTypes -Ui::type&, иначеVi -Ui.
[ Example:
int i; float j; make_tuple(1, ref(i), cref(j))
создает кортеж типаtuple<int, int&, const float&>. ] — end example
template<class... TTypes>
constexpr tuple<TTypes&&...> forward_as_tuple(TTypes&&... t) noexcept;
Effects: Создает кортеж ссылок на аргументы,t пригодный для пересылки в качестве аргументов функции. Поскольку результат может содержать ссылки на временные переменные, программа должна гарантировать, что возвращаемое значение этой функции не переживет ни один из ее аргументов (например, программа обычно не должна сохранять результат в именованной переменной).
template<class... TTypes>
constexpr tuple<TTypes&...> tie(TTypes&... t) noexcept;
Returns:tuple<TTypes&...>(t...). Когда аргумент вt isignore, присвоение любого значения соответствующему элементу кортежа не имеет никакого эффекта.
[ Example: tie функции позволяют создавать кортежи, которые распаковывают кортежи в переменные.ignore можно использовать для элементов, которые не нужны:
int i; std::string s;
tie(i, ignore, s) = make_tuple(42, 3.14, "C++");
// i == 42, s == "C++"
— end example ]
template <class... Tuples>
constexpr tuple<CTypes...> tuple_cat(Tuples&&... tpls);
В следующих параграфах пустьTi будетith типомTuples, Ui бытьremove_reference_t<Ti>иtpi будетith параметром в пакете параметров функцииtpls, где все индексации отсчитываются от нуля.
Requires: Для всехi,Ui должен быть тип cvituple<Argsi...>, гдеcvi это (возможно , пустой) и является параметром пакет , представляющий типы элементов в . Позвольте быть типом в . Для всех должны быть выполнены следующие требования: ith cv-qualifier-seqArgsi UiAik kth ArgsiAik
ЕслиTi выводится как ссылочный тип lvalue, то в is_constructible_v<Aik, cviAik&> == trueпротивном случае
is_constructible_v<Aik, cviAik&&> == true.
Remarks: Типы вCTypes должны быть равны упорядоченной последовательности расширенных типов Args0..., Args1..., …, Argsn−1..., гдеn равноsizeof...(Tuples). Позвольтеei... бытьith упорядоченной последовательностью элементов кортежа результирующегоtuple объекта, соответствующей последовательности типовArgsi.
Returns: tuple Объект , построенный по инициализацииkith элемента типаeik вei... с
get<ki>(std::forward<Ti>(tpi))
для каждой действующейki и каждой группыei по порядку.