Namespaces
Variants

std:: forward_as_tuple

From cppreference.net
Utilities library
Определено в заголовочном файле <tuple>
template < class ... Types >
std:: tuple < Types && ... > forward_as_tuple ( Types && ... args ) noexcept ;
(начиная с C++11)
(constexpr начиная с C++14)

Создает кортеж ссылок на аргументы в args , подходящий для пересылки в качестве аргумента функции. Кортеж имеет элементы данных в виде rvalue-ссылок, когда в качестве аргументов используются rvalues, и в противном случае имеет элементы данных в виде lvalue-ссылок.

Содержание

Параметры

args - ноль или более аргументов для создания кортежа

Возвращаемое значение

Объект std::tuple , созданный как будто с помощью std:: tuple < Types && ... > ( std:: forward < Types > ( args ) ... )

Примечания

Если аргументы являются временными объектами, forward_as_tuple не продлевает их время жизни; их необходимо использовать до конца полного выражения.

Пример

#include <iostream>
#include <map>
#include <string>
#include <tuple>
int main()
{
    std::map<int, std::string> m;
    m.emplace(std::piecewise_construct,
              std::forward_as_tuple(6),
              std::forward_as_tuple(9, 'g'));
    std::cout << "m[6] = " << m[6] << '\n';
    // The following is an error: it produces a
    // std::tuple<int&&, char&&> holding two dangling references.
    //
    // auto t = std::forward_as_tuple(20, 'a');
    // m.emplace(std::piecewise_construct, std::forward_as_tuple(10), t);
}

Вывод:

m[6] = ggggggggg

Смотрите также

(C++11)
создает объект tuple типа, определяемого типами аргументов
(шаблон функции)
(C++11)
создает tuple ссылок на lvalue или распаковывает кортеж в отдельные объекты
(шаблон функции)
(C++11)
создает tuple путем объединения любого количества кортежей
(шаблон функции)
(C++17)
вызывает функцию с кортежем аргументов
(шаблон функции)