|
|
Member functions | ||||
pair::operator= | ||||
(C++11) | ||||
Non-member functions | ||||
(until C++20)(until C++20)(until C++20)(until C++20)(until C++20)(C++20) | ||||
(C++11) | ||||
(C++11) | ||||
Helper classes | ||||
(C++11) | ||||
(C++11) | ||||
(C++23) | ||||
(C++23) | ||||
(C++11) | ||||
Deduction guides(C++17) |
(1) | ||
pair& operator=(const pair& other); | (until C++20) | |
constexpr pair& operator=(const pair& other); | (since C++20) | |
constexprconst pair& operator=(const pair& other)const; | (2) | (since C++23) |
(3) | ||
template<class U1,class U2> pair& operator=(const pair<U1, U2>& other); | (until C++20) | |
template<class U1,class U2> constexpr pair& operator=(const pair<U1, U2>& other); | (since C++20) | |
template<class U1,class U2> constexprconst pair& operator=(const pair<U1, U2>& other)const; | (4) | (since C++23) |
(5) | ||
pair& operator=( pair&& other)noexcept(/* see below */); | (since C++11) (until C++20) | |
constexpr pair& operator=( pair&& other)noexcept(/* see below */); | (since C++20) | |
constexprconst pair& operator=( pair&& other)const; | (6) | (since C++23) |
(7) | ||
template<class U1,class U2> pair& operator=( pair<U1, U2>&& p); | (since C++11) (until C++20) | |
template<class U1,class U2> constexpr pair& operator=( pair<U1, U2>&& p); | (since C++20) | |
template<class U1,class U2> constexprconst pair& operator=( pair<U1, U2>&& p)const; | (8) | (since C++23) |
template< pair-like P> constexpr pair& operator=( P&& u); | (9) | (since C++23) |
template< pair-like P> constexprconst pair& operator=( P&& u)const; | (10) | (since C++23) |
Replaces the contents of the pair.
The assignment operator is implicitly declared. Using this assignment operator makes the program ill-formed if either | (until C++11) |
This overload is defined as deleted if eitherstd::is_copy_assignable<T1>::value orstd::is_copy_assignable<T2>::value isfalse. | (since C++11) |
first
andother.second tosecond
.This overload participates in overload resolution only ifstd::is_assignable<T1&,const U1&>::value andstd::is_assignable<T2&,const U2&>::value are bothtrue. | (since C++11) |
first
andother.second tosecond
.Contents |
other | - | pair of values to replace the contents of this pair |
p | - | pair of values of possibly different types to replace the contents of this pair |
u | - | pair-like object of values to replace the contents of this pair |
Type requirements | ||
-T1 must meet the requirements ofCopyAssignable fromU1 .(until C++11) | ||
-T2 must meet the requirements ofCopyAssignable fromU2 .(until C++11) |
*this
std::is_nothrow_move_assignable<T1>::value&&
std::is_nothrow_move_assignable<T2>::value
#include <cstddef>#include <iomanip>#include <iostream>#include <utility>#include <vector> template<class Os,class T>Os& operator<<(Os& os,conststd::vector<T>& v){ os<<'{';for(std::size_t t=0; t!= v.size();++t) os<< v[t]<<(t+1< v.size()?", ":"");return os<<'}';} template<class Os,class U1,class U2>Os& operator<<(Os& os,conststd::pair<U1, U2>& pair){return os<<'{'<< pair.first<<", "<< pair.second<<'}';} int main(){std::pair<int,std::vector<int>> p{1,{2}}, q{2,{5,6}}; p= q;// (1) operator=(const pair& other);std::cout<<std::setw(23)<<std::left<<"(1) p = q;"<<"p: "<< p<<" q: "<< q<<'\n'; std::pair<short,std::vector<int>> r{4,{7,8,9}}; p= r;// (3) operator=(const pair<U1, U2>& other);std::cout<<std::setw(23)<<"(3) p = r;"<<"p: "<< p<<" r: "<< r<<'\n'; p=std::pair<int,std::vector<int>>{3,{4}}; p= std::move(q);// (5) operator=(pair&& other);std::cout<<std::setw(23)<<"(5) p = std::move(q);"<<"p: "<< p<<" q: "<< q<<'\n'; p=std::pair<int,std::vector<int>>{5,{6}}; p= std::move(r);// (7) operator=(pair<U1, U2>&& other);std::cout<<std::setw(23)<<"(7) p = std::move(r);"<<"p: "<< p<<" r: "<< r<<'\n';}
Output:
(1) p = q; p: {2, {5, 6}} q: {2, {5, 6}}(3) p = r; p: {4, {7, 8, 9}} r: {4, {7, 8, 9}}(5) p = std::move(q); p: {2, {5, 6}} q: {2, {}}(7) p = std::move(r); p: {4, {7, 8, 9}} r: {4, {}}
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 885 | C++98 | missing heterogeneous copy assignment | added (as overload(3)) |
LWG 2729 | C++11 | pair::operator= was unconstrained and mightresult in unnecessary undefined behavior | constrained |
assigns the contents of onetuple to another(public member function of std::tuple<Types...> )[edit] |