QPair: add member-swap

std::pair has it, too.

Change-Id: I2526b09455db5502ad38a81f3d401098d54614a5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Marc Mutz 2015-01-07 15:45:15 +01:00
parent 597a71fa99
commit daaf3b8578
2 changed files with 37 additions and 0 deletions

View File

@ -62,10 +62,22 @@ struct QPair
{ first = std::move(p.first); second = std::move(p.second); return *this; } { first = std::move(p.first); second = std::move(p.second); return *this; }
#endif #endif
Q_DECL_RELAXED_CONSTEXPR void swap(QPair &other)
Q_DECL_NOEXCEPT_EXPR(noexcept(qSwap(other.first, other.first)) && noexcept(qSwap(other.second, other.second)))
{
// use qSwap() to pick up ADL swaps automatically:
qSwap(first, other.first);
qSwap(second, other.second);
}
T1 first; T1 first;
T2 second; T2 second;
}; };
template <typename T1, typename T2>
void swap(QPair<T1, T2> &lhs, QPair<T1, T2> &rhs) Q_DECL_NOEXCEPT_EXPR(noexcept(lhs.swap(rhs)))
{ lhs.swap(rhs); }
// mark QPair<T1,T2> as complex/movable/primitive depending on the // mark QPair<T1,T2> as complex/movable/primitive depending on the
// typeinfos of the constituents: // typeinfos of the constituents:
template<class T1, class T2> template<class T1, class T2>

View File

@ -116,6 +116,31 @@
\sa qMakePair() \sa qMakePair()
*/ */
/*!
\fn void QPair::swap(QPair &other)
\since 5.5
Swaps this pair with \a other.
Equivalent to
\code
qSwap(this->first, other.first);
qSwap(this->second, other.second);
\endcode
Swap overloads are found in namespace \c std as well as via
argument-dependent lookup (ADL) in \c{T}'s namespace.
*/
/*!
\fn void swap(QPair<T1, T2> &lhs, QPair<T1, T2> &rhs)
\overload
\relates QPair
\since 5.5
Swaps \a lhs with \a rhs.
*/
/*! \fn bool operator==(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2) /*! \fn bool operator==(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
\relates QPair \relates QPair