Index: include/type_traits =================================================================== --- include/type_traits +++ include/type_traits @@ -3692,6 +3692,7 @@ #else void #endif +_LIBCPP_CONSTEXPR_AFTER_CXX17 swap(_Tp& __x, _Tp& __y) _NOEXCEPT_(is_nothrow_move_constructible<_Tp>::value && is_nothrow_move_assignable<_Tp>::value) { @@ -3701,14 +3702,14 @@ } template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 typename enable_if< __is_swappable<_Tp>::value >::type swap(_Tp (&__a)[_Np], _Tp (&__b)[_Np]) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value); template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) // _NOEXCEPT_(_NOEXCEPT_(swap(*__a, *__b))) Index: include/utility =================================================================== --- include/utility +++ include/utility @@ -252,7 +252,7 @@ template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator2 swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) { @@ -263,7 +263,7 @@ // forward declared in template -inline _LIBCPP_INLINE_VISIBILITY +inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 typename enable_if< __is_swappable<_Tp>::value >::type Index: test/std/algorithms/alg.modifying.operations/alg.swap/iter_swap.pass.cpp =================================================================== --- test/std/algorithms/alg.modifying.operations/alg.swap/iter_swap.pass.cpp +++ test/std/algorithms/alg.modifying.operations/alg.swap/iter_swap.pass.cpp @@ -18,6 +18,16 @@ #include "test_macros.h" +#if TEST_STD_VER > 17 +constexpr bool test_swap_constexpr() +{ + int i = 1; + int j = 2; + std::iter_swap(&i, &j); + return i == 2 && j == 1; +} +#endif // TEST_STD_VER > 17 + int main(int, char**) { int i = 1; @@ -26,5 +36,9 @@ assert(i == 2); assert(j == 1); +#if TEST_STD_VER > 17 + static_assert(test_swap_constexpr()); +#endif // TEST_STD_VER > 17 + return 0; } Index: test/std/algorithms/alg.modifying.operations/alg.swap/swap_ranges.pass.cpp =================================================================== --- test/std/algorithms/alg.modifying.operations/alg.swap/swap_ranges.pass.cpp +++ test/std/algorithms/alg.modifying.operations/alg.swap/swap_ranges.pass.cpp @@ -105,6 +105,21 @@ } } +#if TEST_STD_VER > 17 +constexpr bool test_swap_constexpr() +{ + int i[3] = {1, 2, 3}; + int j[3] = {4, 5, 6}; + std::swap_ranges(i, i+3, j); + return i[0] == 4 && + i[1] == 5 && + i[2] == 6 && + j[0] == 1 && + j[1] == 2 && + j[2] == 3; +} +#endif // TEST_STD_VER > 17 + int main(int, char**) { test, forward_iterator >(); @@ -149,6 +164,10 @@ test1*, std::unique_ptr*>(); #endif // TEST_STD_VER >= 11 +#if TEST_STD_VER > 17 + static_assert(test_swap_constexpr()); +#endif // TEST_STD_VER > 17 + test2(); return 0; Index: test/std/utilities/utility/utility.swap/swap.pass.cpp =================================================================== --- test/std/utilities/utility/utility.swap/swap.pass.cpp +++ test/std/utilities/utility/utility.swap/swap.pass.cpp @@ -62,6 +62,16 @@ } #endif +#if TEST_STD_VER > 17 +constexpr bool test_swap_constexpr() +{ + int i = 1; + int j = 2; + std::swap(i, j); + return i == 2 && j == 1; +} +#endif // TEST_STD_VER > 17 + int main(int, char**) { @@ -100,5 +110,9 @@ } #endif +#if TEST_STD_VER > 17 + static_assert(test_swap_constexpr()); +#endif // TEST_STD_VER > 17 + return 0; } Index: test/std/utilities/utility/utility.swap/swap_array.pass.cpp =================================================================== --- test/std/utilities/utility/utility.swap/swap_array.pass.cpp +++ test/std/utilities/utility/utility.swap/swap_array.pass.cpp @@ -53,6 +53,20 @@ } #endif +#if TEST_STD_VER > 17 +constexpr bool test_swap_constexpr() +{ + int i[3] = {1, 2, 3}; + int j[3] = {4, 5, 6}; + std::swap(i, j); + return i[0] == 4 && + i[1] == 5 && + i[2] == 6 && + j[0] == 1 && + j[1] == 2 && + j[2] == 3; +} +#endif // TEST_STD_VER > 17 int main(int, char**) { @@ -98,5 +112,9 @@ } #endif +#if TEST_STD_VER > 17 + static_assert(test_swap_constexpr()); +#endif // TEST_STD_VER > 17 + return 0; }