| tuple& operator=( const tuple& other ); | (1) | (since C++11) | 
| tuple& operator=( tuple&& other ); | (2) | (since C++11) | 
| template< class... UTypes >tuple& operator=( const tuple<UTypes...>& other );
 | (3) | (since C++11) | 
| template< class... UTypes >tuple& operator=( tuple<UTypes...>&& other );
 | (4) | (since C++11) | 
| template< class U1, class U2 >tuple& operator=( const pair<U1,U2>& p );
 | (5) | (since C++11) | 
| template< class U1, class U2 >tuple& operator=( pair<U1,U2>&& p );
 | (6) | (since C++11) | 
|  |  |  | 
Replaces the contents of the tuple with the contents of another tuple or a pair.
1) Copy assignment operator. Replaces each element with a copy of the corresponding element of other.
2) Move assignment operator. Replaces each element with the corresponding element of other using move semantics. 
3) For all i, assigns std::get<i>(other) to std::get<i>(*this).
4) For all i, assigns std::forward<Ui>(std::get<i>(other)) to std::get<i>(*this). 
5) Assigns p.first to the first element of *this and p.second to the second element of *this.
6) Assigns std::forward<U1>(p.first) to the first element of *this and std::forward<U2>(p.second) to the second element of *this.
 
| The behavior of these functions is undefined unless:
  For (1), std::is_copy_assignable<T_i>::value is true for all T_iinTypes. For (2), std::is_move_assignable<T_i>::value is true for all T_iinTypes. For (3), sizeof...(UTypes) == sizeof...(Types) and std::is_assignable<T_i&, const U_i&>::value is true for all corresponding pairs of types T_iinTypesandU_iinUTypes. For (4), sizeof...(UTypes) == sizeof...(Types) and std::is_assignable<T_i&, U_i&&>::value is true for all corresponding pairs of types T_iinTypesandU_iinUTypes. For (5), sizeof...(Types) == 2 and std::is_assignable<T_0&, const U1&>::value and std::is_assignable<T_1&, const U2&>::value are both true, where T_0andT_1are the two types constitutingTypes. For (6), sizeof...(Types) == 2 and std::is_assignable<T_0&, U1&&>::value and std::is_assignable<T_1&, U2&&>::value are both true, where T_0andT_1are the two types constitutingTypes.
 | (until C++17) | 
| These functions do not participate in overload resolution (or, for the copy assignment operator, is defined as deleted) if any required assignment operation is invalid or if there is a size mismatch. Specifically:
  (1) is defined as deleted unless std::is_copy_assignable<T_i>::value is true for all T_iinTypes. (2) does not participate in overload resolution unless std::is_move_assignable<T_i>::value is true for all T_iinTypes. (3) does not participate in overload resolution unless sizeof...(UTypes) == sizeof...(Types) and std::is_assignable<T_i&, const U_i&>::value is true for all corresponding pairs of types T_iinTypesandU_iinUTypes. (4) does not participate in overload resolution unless sizeof...(UTypes) == sizeof...(Types) and std::is_assignable<T_i&, U_i&&>::value is true for all corresponding pairs of types T_iinTypesandU_iinUTypes. (5) does not participate in overload resolution unless sizeof...(Types) == 2, std::is_assignable<T_0&, const U1&>::value and std::is_assignable<T_1&, const U2&>::value are both true, where T_0andT_1are the two types constitutingTypes. (6) does not participate in overload resolution unless std::is_assignable<T_0&, U1&&>::value and std::is_assignable<T_1&, U2&&>::value are both true, where T_0andT_1are the two types constitutingTypes.
 | (since C++17) | 
Parameters
| other | - | tuple to replace the contents of this tuple | 
| p | - | pair to replace the contents of this 2-tuple | 
Return value
*this
Exceptions
1) (none)
2) 
noexcept specification:  
noexcept(
    is_nothrow_move_assignable<T0>::value &&
    is_nothrow_move_assignable<T1>::value &&
    is_nothrow_move_assignable<T2>::value &&
    ...
)  
3-6) (none)
Example
See also