diff options
author | Edward Smith-Rowland <3dw4rd@verizon.net> | 2019-08-14 17:54:15 +0000 |
---|---|---|
committer | Edward Smith-Rowland <emsr@gcc.gnu.org> | 2019-08-14 17:54:15 +0000 |
commit | 7a91c710999d274c188fc0c504732a6f0b9059c1 (patch) | |
tree | 524bc4d35333f8ba97b84400a1f5908d8d51c4d3 /libstdc++-v3/include | |
parent | 0bdf9f92531932ff1bb238ed84bf90597d9be3d2 (diff) | |
download | gcc-7a91c710999d274c188fc0c504732a6f0b9059c1.tar.gz |
Implement C++20 p0879 - Constexpr for swap and swap related functions.
2019-08-14 Edward Smith-Rowland <3dw4rd@verizon.net>
Implement C++20 p0879 - Constexpr for swap and swap related functions.
* include/std/version (__cpp_lib_constexpr_swap_algorithms): New macro.
* include/bits/algorithmfwd.h (__cpp_lib_constexpr_swap_algorithms):
New macro.
(iter_swap, make_heap, next_permutation, partial_sort_copy, pop_heap)
(prev_permutation, push_heap, reverse, rotate, sort_heap, swap)
(swap_ranges, nth_element, partial_sort, sort): Add constexpr.
* include/bits/move.h (swap): Add constexpr.
* include/bits/stl_algo.h (__move_median_to_first, __reverse, reverse)
(__gcd, __rotate, rotate, __partition, __heap_select)
(__partial_sort_copy, partial_sort_copy, __unguarded_partition)
(__unguarded_partition_pivot, __partial_sort, __introsort_loop, __sort)
(__introselect, __chunk_insertion_sort, next_permutation)
(prev_permutation, partition, partial_sort, nth_element, sort)
(__iter_swap::iter_swap, iter_swap, swap_ranges): Add constexpr.
* include/bits/stl_algobase.h (__iter_swap::iter_swap, iter_swap)
(swap_ranges): Add constexpr.
* include/bits/stl_heap.h (__push_heap, push_heap, __adjust_heap,
__pop_heap, pop_heap, __make_heap, make_heap, __sort_heap, sort_heap):
Add constexpr.
* include/std/type_traits (swap): Add constexpr.
* testsuite/25_algorithms/headers/algorithm/synopsis.cc: Add constexpr.
* testsuite/25_algorithms/iter_swap/constexpr.cc: New test.
* testsuite/25_algorithms/make_heap/constexpr.cc: New test.
* testsuite/25_algorithms/next_permutation/constexpr.cc: New test.
* testsuite/25_algorithms/nth_element/constexpr.cc: New test.
* testsuite/25_algorithms/partial_sort/constexpr.cc: New test.
* testsuite/25_algorithms/partial_sort_copy/constexpr.cc: New test.
* testsuite/25_algorithms/partition/constexpr.cc: New test.
* testsuite/25_algorithms/pop_heap/constexpr.cc: New test.
* testsuite/25_algorithms/prev_permutation/constexpr.cc: New test.
* testsuite/25_algorithms/push_heap/constexpr.cc: New test.
* testsuite/25_algorithms/reverse/constexpr.cc: New test.
* testsuite/25_algorithms/rotate/constexpr.cc: New test.
* testsuite/25_algorithms/sort/constexpr.cc: New test.
* testsuite/25_algorithms/sort_heap/constexpr.cc: New test.
* testsuite/25_algorithms/swap/constexpr.cc: New test.
* testsuite/25_algorithms/swap_ranges/constexpr.cc: New test.
From-SVN: r274488
Diffstat (limited to 'libstdc++-v3/include')
-rw-r--r-- | libstdc++-v3/include/bits/algorithmfwd.h | 28 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/move.h | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_algo.h | 33 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_algobase.h | 4 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_heap.h | 13 | ||||
-rw-r--r-- | libstdc++-v3/include/std/type_traits | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/std/version | 1 |
7 files changed, 83 insertions, 0 deletions
diff --git a/libstdc++-v3/include/bits/algorithmfwd.h b/libstdc++-v3/include/bits/algorithmfwd.h index 99491db1c5e..9c511f05197 100644 --- a/libstdc++-v3/include/bits/algorithmfwd.h +++ b/libstdc++-v3/include/bits/algorithmfwd.h @@ -193,6 +193,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus > 201703L # define __cpp_lib_constexpr_algorithms 201711L +# define __cpp_lib_constexpr_swap_algorithms 201806L #endif #if __cplusplus >= 201103L @@ -377,6 +378,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif template<typename _FIter1, typename _FIter2> + _GLIBCXX20_CONSTEXPR void iter_swap(_FIter1, _FIter2); @@ -391,10 +393,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION lower_bound(_FIter, _FIter, const _Tp&, _Compare); template<typename _RAIter> + _GLIBCXX20_CONSTEXPR void make_heap(_RAIter, _RAIter); template<typename _RAIter, typename _Compare> + _GLIBCXX20_CONSTEXPR void make_heap(_RAIter, _RAIter, _Compare); @@ -478,10 +482,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // mismatch template<typename _BIter> + _GLIBCXX20_CONSTEXPR bool next_permutation(_BIter, _BIter); template<typename _BIter, typename _Compare> + _GLIBCXX20_CONSTEXPR bool next_permutation(_BIter, _BIter, _Compare); @@ -496,10 +502,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // partial_sort template<typename _IIter, typename _RAIter> + _GLIBCXX20_CONSTEXPR _RAIter partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter); template<typename _IIter, typename _RAIter, typename _Compare> + _GLIBCXX20_CONSTEXPR _RAIter partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare); @@ -519,26 +527,32 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif template<typename _RAIter> + _GLIBCXX20_CONSTEXPR void pop_heap(_RAIter, _RAIter); template<typename _RAIter, typename _Compare> + _GLIBCXX20_CONSTEXPR void pop_heap(_RAIter, _RAIter, _Compare); template<typename _BIter> + _GLIBCXX20_CONSTEXPR bool prev_permutation(_BIter, _BIter); template<typename _BIter, typename _Compare> + _GLIBCXX20_CONSTEXPR bool prev_permutation(_BIter, _BIter, _Compare); template<typename _RAIter> + _GLIBCXX20_CONSTEXPR void push_heap(_RAIter, _RAIter); template<typename _RAIter, typename _Compare> + _GLIBCXX20_CONSTEXPR void push_heap(_RAIter, _RAIter, _Compare); @@ -579,6 +593,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // replace_if template<typename _BIter> + _GLIBCXX20_CONSTEXPR void reverse(_BIter, _BIter); @@ -590,6 +605,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline namespace _V2 { template<typename _FIter> + _GLIBCXX20_CONSTEXPR _FIter rotate(_FIter, _FIter, _FIter); } @@ -613,10 +629,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif template<typename _RAIter> + _GLIBCXX20_CONSTEXPR void sort_heap(_RAIter, _RAIter); template<typename _RAIter, typename _Compare> + _GLIBCXX20_CONSTEXPR void sort_heap(_RAIter, _RAIter, _Compare); @@ -628,15 +646,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // For C++11 swap() is declared in <type_traits>. template<typename _Tp, size_t _Nm> + _GLIBCXX20_CONSTEXPR inline void swap(_Tp& __a, _Tp& __b); template<typename _Tp, size_t _Nm> + _GLIBCXX20_CONSTEXPR inline void swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]); #endif template<typename _FIter1, typename _FIter2> + _GLIBCXX20_CONSTEXPR _FIter2 swap_ranges(_FIter1, _FIter1, _FIter2); @@ -783,22 +804,27 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate); template<typename _RAIter> + _GLIBCXX20_CONSTEXPR void nth_element(_RAIter, _RAIter, _RAIter); template<typename _RAIter, typename _Compare> + _GLIBCXX20_CONSTEXPR void nth_element(_RAIter, _RAIter, _RAIter, _Compare); template<typename _RAIter> + _GLIBCXX20_CONSTEXPR void partial_sort(_RAIter, _RAIter, _RAIter); template<typename _RAIter, typename _Compare> + _GLIBCXX20_CONSTEXPR void partial_sort(_RAIter, _RAIter, _RAIter, _Compare); template<typename _BIter, typename _Predicate> + _GLIBCXX20_CONSTEXPR _BIter partition(_BIter, _BIter, _Predicate); @@ -892,10 +918,12 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare); template<typename _RAIter> + _GLIBCXX20_CONSTEXPR void sort(_RAIter, _RAIter); template<typename _RAIter, typename _Compare> + _GLIBCXX20_CONSTEXPR void sort(_RAIter, _RAIter, _Compare); diff --git a/libstdc++-v3/include/bits/move.h b/libstdc++-v3/include/bits/move.h index e3ddeb563b4..d7c7068e29c 100644 --- a/libstdc++-v3/include/bits/move.h +++ b/libstdc++-v3/include/bits/move.h @@ -175,6 +175,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @return Nothing. */ template<typename _Tp> + _GLIBCXX20_CONSTEXPR inline #if __cplusplus >= 201103L typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>, @@ -199,6 +200,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // DR 809. std::swap should be overloaded for array types. /// Swap the contents of two arrays. template<typename _Tp, size_t _Nm> + _GLIBCXX20_CONSTEXPR inline #if __cplusplus >= 201103L typename enable_if<__is_swappable<_Tp>::value>::type diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h index 0d707250d2e..bece93379de 100644 --- a/libstdc++-v3/include/bits/stl_algo.h +++ b/libstdc++-v3/include/bits/stl_algo.h @@ -74,6 +74,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// Swaps the median value of *__a, *__b and *__c under __comp to *__result template<typename _Iterator, typename _Compare> + _GLIBCXX20_CONSTEXPR void __move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b, _Iterator __c, _Compare __comp) @@ -1162,6 +1163,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * overloaded for bidirectional iterators. */ template<typename _BidirectionalIterator> + _GLIBCXX20_CONSTEXPR void __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last, bidirectional_iterator_tag) @@ -1182,6 +1184,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * overloaded for random access iterators. */ template<typename _RandomAccessIterator> + _GLIBCXX20_CONSTEXPR void __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last, random_access_iterator_tag) @@ -1210,6 +1213,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * swaps @p *(__first+i) and @p *(__last-(i+1)) */ template<typename _BidirectionalIterator> + _GLIBCXX20_CONSTEXPR inline void reverse(_BidirectionalIterator __first, _BidirectionalIterator __last) { @@ -1263,6 +1267,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * It returns the greatest common divisor of two integer values. */ template<typename _EuclideanRingElement> + _GLIBCXX20_CONSTEXPR _EuclideanRingElement __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n) { @@ -1280,6 +1285,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// This is a helper function for the rotate algorithm. template<typename _ForwardIterator> + _GLIBCXX20_CONSTEXPR _ForwardIterator __rotate(_ForwardIterator __first, _ForwardIterator __middle, @@ -1321,6 +1327,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// This is a helper function for the rotate algorithm. template<typename _BidirectionalIterator> + _GLIBCXX20_CONSTEXPR _BidirectionalIterator __rotate(_BidirectionalIterator __first, _BidirectionalIterator __middle, @@ -1359,6 +1366,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// This is a helper function for the rotate algorithm. template<typename _RandomAccessIterator> + _GLIBCXX20_CONSTEXPR _RandomAccessIterator __rotate(_RandomAccessIterator __first, _RandomAccessIterator __middle, @@ -1465,6 +1473,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * for each @p n in the range @p [0,__last-__first). */ template<typename _ForwardIterator> + _GLIBCXX20_CONSTEXPR inline _ForwardIterator rotate(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last) @@ -1520,6 +1529,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// This is a helper function... template<typename _ForwardIterator, typename _Predicate> + _GLIBCXX20_CONSTEXPR _ForwardIterator __partition(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred, forward_iterator_tag) @@ -1545,6 +1555,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// This is a helper function... template<typename _BidirectionalIterator, typename _Predicate> + _GLIBCXX20_CONSTEXPR _BidirectionalIterator __partition(_BidirectionalIterator __first, _BidirectionalIterator __last, _Predicate __pred, bidirectional_iterator_tag) @@ -1699,6 +1710,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// This is a helper function for the sort routines. template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR void __heap_select(_RandomAccessIterator __first, _RandomAccessIterator __middle, @@ -1714,6 +1726,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _InputIterator, typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR _RandomAccessIterator __partial_sort_copy(_InputIterator __first, _InputIterator __last, _RandomAccessIterator __result_first, @@ -1768,6 +1781,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * The value returned is @p __result_first+N. */ template<typename _InputIterator, typename _RandomAccessIterator> + _GLIBCXX20_CONSTEXPR inline _RandomAccessIterator partial_sort_copy(_InputIterator __first, _InputIterator __last, _RandomAccessIterator __result_first, @@ -1818,6 +1832,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ template<typename _InputIterator, typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline _RandomAccessIterator partial_sort_copy(_InputIterator __first, _InputIterator __last, _RandomAccessIterator __result_first, @@ -1931,6 +1946,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// This is a helper function... template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR _RandomAccessIterator __unguarded_partition(_RandomAccessIterator __first, _RandomAccessIterator __last, @@ -1952,6 +1968,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// This is a helper function... template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline _RandomAccessIterator __unguarded_partition_pivot(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) @@ -1963,6 +1980,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline void __partial_sort(_RandomAccessIterator __first, _RandomAccessIterator __middle, @@ -1975,6 +1993,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// This is a helper function for the sort routine. template<typename _RandomAccessIterator, typename _Size, typename _Compare> + _GLIBCXX20_CONSTEXPR void __introsort_loop(_RandomAccessIterator __first, _RandomAccessIterator __last, @@ -1998,6 +2017,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // sort template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline void __sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) @@ -2012,6 +2032,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<typename _RandomAccessIterator, typename _Size, typename _Compare> + _GLIBCXX20_CONSTEXPR void __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last, _Size __depth_limit, @@ -2728,6 +2749,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _RandomAccessIterator, typename _Distance, typename _Compare> + _GLIBCXX20_CONSTEXPR void __chunk_insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, @@ -2997,6 +3019,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * is the largest of the set, the smallest is generated and false returned. */ template<typename _BidirectionalIterator> + _GLIBCXX20_CONSTEXPR inline bool next_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last) @@ -3029,6 +3052,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * smallest is generated and false returned. */ template<typename _BidirectionalIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline bool next_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp) @@ -3098,6 +3122,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * returned. */ template<typename _BidirectionalIterator> + _GLIBCXX20_CONSTEXPR inline bool prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last) @@ -3130,6 +3155,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * the largest is generated and false returned. */ template<typename _BidirectionalIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline bool prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp) @@ -4757,6 +4783,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * @p stable_partition() if this is needed. */ template<typename _ForwardIterator, typename _Predicate> + _GLIBCXX20_CONSTEXPR inline _ForwardIterator partition(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) @@ -4790,6 +4817,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * the range @p [__middle,__last) then *j<*i and *k<*i are both false. */ template<typename _RandomAccessIterator> + _GLIBCXX20_CONSTEXPR inline void partial_sort(_RandomAccessIterator __first, _RandomAccessIterator __middle, @@ -4828,6 +4856,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * are both false. */ template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline void partial_sort(_RandomAccessIterator __first, _RandomAccessIterator __middle, @@ -4864,6 +4893,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * holds that *j < *i is false. */ template<typename _RandomAccessIterator> + _GLIBCXX20_CONSTEXPR inline void nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last) @@ -4903,6 +4933,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * holds that @p __comp(*j,*i) is false. */ template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline void nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last, _Compare __comp) @@ -4940,6 +4971,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * @p stable_sort() if this is needed. */ template<typename _RandomAccessIterator> + _GLIBCXX20_CONSTEXPR inline void sort(_RandomAccessIterator __first, _RandomAccessIterator __last) { @@ -4970,6 +5002,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * @p stable_sort() if this is needed. */ template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline void sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index ab1ff5185d4..36bb9ccb777 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -136,6 +136,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct __iter_swap { template<typename _ForwardIterator1, typename _ForwardIterator2> + _GLIBCXX20_CONSTEXPR static void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) { @@ -151,6 +152,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct __iter_swap<true> { template<typename _ForwardIterator1, typename _ForwardIterator2> + _GLIBCXX20_CONSTEXPR static void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) { @@ -170,6 +172,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * iterators themselves. */ template<typename _ForwardIterator1, typename _ForwardIterator2> + _GLIBCXX20_CONSTEXPR inline void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) { @@ -216,6 +219,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * The ranges must not overlap. */ template<typename _ForwardIterator1, typename _ForwardIterator2> + _GLIBCXX20_CONSTEXPR _ForwardIterator2 swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) diff --git a/libstdc++-v3/include/bits/stl_heap.h b/libstdc++-v3/include/bits/stl_heap.h index d9530e66621..7eb12f04321 100644 --- a/libstdc++-v3/include/bits/stl_heap.h +++ b/libstdc++-v3/include/bits/stl_heap.h @@ -129,6 +129,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _RandomAccessIterator, typename _Distance, typename _Tp, typename _Compare> + _GLIBCXX20_CONSTEXPR void __push_heap(_RandomAccessIterator __first, _Distance __holeIndex, _Distance __topIndex, _Tp __value, @@ -155,6 +156,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * [__first,__last) is a valid heap. */ template<typename _RandomAccessIterator> + _GLIBCXX20_CONSTEXPR inline void push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { @@ -190,6 +192,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * performed using comp. */ template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline void push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) @@ -215,6 +218,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _RandomAccessIterator, typename _Distance, typename _Tp, typename _Compare> + _GLIBCXX20_CONSTEXPR void __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex, _Distance __len, _Tp __value, _Compare __comp) @@ -244,6 +248,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline void __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _RandomAccessIterator __result, _Compare& __comp) @@ -272,6 +277,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * heap. */ template<typename _RandomAccessIterator> + _GLIBCXX20_CONSTEXPR inline void pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { @@ -305,6 +311,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * heap. Comparisons are made using comp. */ template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline void pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) @@ -327,6 +334,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR void __make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare& __comp) @@ -361,6 +369,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * This operation makes the elements in [__first,__last) into a heap. */ template<typename _RandomAccessIterator> + _GLIBCXX20_CONSTEXPR inline void make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { @@ -387,6 +396,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * Comparisons are made using __comp. */ template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline void make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) @@ -403,6 +413,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR void __sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare& __comp) @@ -423,6 +434,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * This operation sorts the valid heap in the range [__first,__last). */ template<typename _RandomAccessIterator> + _GLIBCXX20_CONSTEXPR inline void sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { @@ -450,6 +462,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * Comparisons are made using __comp. */ template<typename _RandomAccessIterator, typename _Compare> + _GLIBCXX20_CONSTEXPR inline void sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 9428dadc9d7..b31c26ab381 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -2695,6 +2695,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { }; template<typename _Tp> + _GLIBCXX20_CONSTEXPR inline typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>, is_move_constructible<_Tp>, @@ -2704,6 +2705,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION is_nothrow_move_assignable<_Tp>>::value); template<typename _Tp, size_t _Nm> + _GLIBCXX20_CONSTEXPR inline typename enable_if<__is_swappable<_Tp>::value>::type swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version index 5757568d639..7f7d05fd8f2 100644 --- a/libstdc++-v3/include/std/version +++ b/libstdc++-v3/include/std/version @@ -154,6 +154,7 @@ #define __cpp_lib_bind_front 201907L #define __cpp_lib_bounded_array_traits 201902L #define __cpp_lib_constexpr_algorithms 201711L +#define __cpp_lib_constexpr_swap_algorithms 201806L #if __cpp_impl_destroying_delete # define __cpp_lib_destroying_delete 201806L #endif |