diff options
Diffstat (limited to 'libcxx/include/utility')
| -rw-r--r-- | libcxx/include/utility | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/libcxx/include/utility b/libcxx/include/utility index d9d57a7d780..27b81a0305e 100644 --- a/libcxx/include/utility +++ b/libcxx/include/utility @@ -310,9 +310,18 @@ struct _LIBCPP_TYPE_VIS_ONLY pair ) : first(__p.first), second(__p.second) {} -#if !defined(_LIBCPP_CXX03_LANG) - _LIBCPP_INLINE_VISIBILITY pair(const pair& __p) = default; - _LIBCPP_INLINE_VISIBILITY pair(pair&& __p) = default; +#if !defined(_LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS) && _LIBCPP_TRIVIAL_PAIR_COPY_CTOR + _LIBCPP_INLINE_VISIBILITY + pair(const pair& __p) = default; +#elif !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) || !_LIBCPP_TRIVIAL_PAIR_COPY_CTOR + _LIBCPP_INLINE_VISIBILITY + pair(const pair& __p) + _NOEXCEPT_(is_nothrow_copy_constructible<first_type>::value && + is_nothrow_copy_constructible<second_type>::value) + : first(__p.first), + second(__p.second) + { + } #endif _LIBCPP_INLINE_VISIBILITY @@ -344,6 +353,19 @@ struct _LIBCPP_TYPE_VIS_ONLY pair : first(_VSTD::forward<_U1>(__p.first)), second(_VSTD::forward<_U2>(__p.second)) {} +#ifndef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS + _LIBCPP_INLINE_VISIBILITY + pair(pair&& __p) = default; +#else + _LIBCPP_INLINE_VISIBILITY + pair(pair&& __p) _NOEXCEPT_(is_nothrow_move_constructible<first_type>::value && + is_nothrow_move_constructible<second_type>::value) + : first(_VSTD::forward<first_type>(__p.first)), + second(_VSTD::forward<second_type>(__p.second)) + { + } +#endif + _LIBCPP_INLINE_VISIBILITY pair& operator=(pair&& __p) _NOEXCEPT_(is_nothrow_move_assignable<first_type>::value && |

