Implement n3668 - std::exchange

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@185863 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Marshall Clow
2013-07-08 20:54:40 +00:00
parent d29bb4b7c4
commit e2735d1df0
2 changed files with 60 additions and 0 deletions

View File

@@ -138,6 +138,8 @@ template<size_t N>
template<class... T>
using index_sequence_for = make_index_sequence<sizeof...(T)>;
template<class T, class U=T>
T exchange(T& obj, U&& new_value);
} // std
*/
@@ -685,6 +687,17 @@ template<class... _Tp>
#endif // _LIBCPP_STD_VER > 11
#if _LIBCPP_STD_VER > 11
template<class _T1, class _T2 = _T1>
_LIBCPP_INLINE_VISIBILITY inline
_T1 exchange(_T1& __obj, _T2 && __new_value)
{
_T1 __old_value = _VSTD::move(__obj);
__obj = _VSTD::forward<_T2>(__new_value);
return __old_value;
}
#endif // _LIBCPP_STD_VER > 11
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP_UTILITY