std::forward_as_tuple

From cppreference.com
Defined in header <tuple>
template< class... Types >
tuple<Types&&...> forward_as_tuple( Types&&... args );
(since C++11)

Constructs a tuple of references to the arguments in args suitable for forwarding as an argument to a function. The tuple has rvalue reference data members when rvalues are used as arguments, and otherwise has lvalue reference data members. If rvalues are used, the result of this function must be consumed before the next sequence point.

Contents

[edit] Parameters

args - zero or more arguments to construct the tuple from

[edit] Return value

A std::tuple object created as if by std::tuple<Types&&...>(std::forward<Types>(args)...)

[edit] Exceptions

noexcept specification:  
noexcept
  (since C++11)

[edit] Example

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

Output:

m[10] = aaaaaaaaaaaaaaaaaaaa
creates a tuple object of the type defined by the argument types
(function template)
creates a tuple of lvalue references or unpacks a tuple into individual objects
(function template)
creates a tuple by concatenating any number of tuples
(function template)