diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2021-05-06 16:26:21 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2021-10-01 20:34:49 +0100 |
commit | a09bb4a852f82af02b3f965358cd44b0aa266a5b (patch) | |
tree | e76d8e55f190069b983bcafcabe75e71cbca5671 /libstdc++-v3/include/experimental | |
parent | cfb582f62791dfadc243d97d37f0b83ef77cf480 (diff) |
libstdc++: Add std::__conditional_t alias template
This change is inspired by the suggestion in
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1715r0.html
The new std::__conditional_t alias template is functionally equivalent
to std::conditional_t but should be more efficient to compile, due to
only ever instantiating two specializations (std::__conditional<true>
and std::__conditional<false>) rather than a new specialization for
every use of std::conditional.
The new alias template is also available in C++11, unlike the C++14
std::conditional_t alias.
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
* include/std/type_traits (__conditional): New class template
for internal uses of std::conditional.
(__conditional_t): New alias template to replace conditional_t.
(__and_, __or_, __result_of_memfun, __result_of_memobj): Use
__conditional_t instead of conditional::type.
* include/bits/atomic_base.h (__atomic_impl::_Diff): Likewise.
* include/bits/hashtable.h (_Hashtable): Likewise.
* include/bits/hashtable_policy.h (_Node_iterator, _Insert_base)
(_Local_iterator): Likewise. Replace typedefs with
using-declarations.
* include/bits/move.h (move_if_noexcept): Use __conditional_t.
* include/bits/parse_numbers.h (_Select_int_base): Likewise.
* include/bits/ptr_traits.h (__make_not_void): Likewise.
* include/bits/ranges_algobase.h (__copy_or_move_backward)
(__copy_or_move): Likewise.
* include/bits/ranges_base.h (borrowed_iterator_t): Likewise.
* include/bits/ranges_util.h (borrowed_subrange_t): Likewise.
* include/bits/regex_compiler.h (_BracketMatcher): Use
__conditional_t. Replace typedefs with using-declarations.
* include/bits/shared_ptr_base.h (__shared_count): Use
__conditional_t.
* include/bits/stl_algobase.h (__copy_move, __copy_move_backward):
Likewise.
* include/bits/stl_iterator.h (__detail::__clamp_iter_cat)
(reverse_iterator::iterator_concept)
(__make_move_if_noexcept_iterator)
(iterator_traits<common_iterator<_It, _Sent>>)
(iterator_traits<counted_iterator<_It>>): Likewise.
* include/bits/stl_pair.h (_PCC, pair::operator=): Likewise.
* include/bits/stl_tree.h (_Rb_tree::insert_return_type)
(_Rb_tree::_M_clone_node): Likewise.
* include/bits/unique_ptr.h (unique_ptr(unique_ptr<U,E>&&)):
Likewise.
* include/bits/uses_allocator.h (__uses_alloc): Likewise.
(__is_uses_allocator_predicate): Likewise.
* include/debug/functions.h (__foreign_iterator_aux2): Likewise.
* include/experimental/any (any::_Manager, __any_caster):
Likewise.
* include/experimental/executor (async_completion): Likewise.
* include/experimental/functional (__boyer_moore_base_t):
Likewise.
* include/std/any (any::_Manager): Likewise.
* include/std/functional (__boyer_moore_base_t): Likewise.
* include/std/ranges (borrowed_iterator_t)
(borrowed_subrange_t, __detail::__maybe_present_t)
(__detail::__maybe_const_t, split_view): Likewise.
* include/std/tuple (__empty_not_final, tuple::operator=):
Likewise.
* include/std/variant (__detail::__variant::__get_t): Likewise.
Diffstat (limited to 'libstdc++-v3/include/experimental')
-rw-r--r-- | libstdc++-v3/include/experimental/any | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/executor | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/functional | 6 |
3 files changed, 9 insertions, 9 deletions
diff --git a/libstdc++-v3/include/experimental/any b/libstdc++-v3/include/experimental/any index 7d18f267e8b..44f5db0fb87 100644 --- a/libstdc++-v3/include/experimental/any +++ b/libstdc++-v3/include/experimental/any @@ -115,9 +115,9 @@ inline namespace fundamentals_v1 struct _Manager_external; // creates contained object on the heap template<typename _Tp> - using _Manager = conditional_t<_Internal<_Tp>::value, - _Manager_internal<_Tp>, - _Manager_external<_Tp>>; + using _Manager = __conditional_t<_Internal<_Tp>::value, + _Manager_internal<_Tp>, + _Manager_external<_Tp>>; template<typename _Tp, typename _Decayed = decay_t<_Tp>> using _Decay = enable_if_t<!is_same<_Decayed, any>::value, _Decayed>; @@ -430,8 +430,8 @@ inline namespace fundamentals_v1 // If the type _Tp could never be stored in an any we don't want to // instantiate _Manager<_Tp>, so use _Manager<any::_Op> instead, which // is explicitly specialized and has a no-op _S_manage function. - using _Vp = conditional_t<__and_<__does_not_decay, __is_copyable>::value, - _Up, any::_Op>; + using _Vp = __conditional_t<__and_<__does_not_decay, __is_copyable>{}, + _Up, any::_Op>; // First try comparing function addresses, which works without RTTI if (__any->_M_manager == &any::_Manager<_Vp>::_S_manage #if __cpp_rtti diff --git a/libstdc++-v3/include/experimental/executor b/libstdc++-v3/include/experimental/executor index 4322a7f5caf..e7a0c6e6d98 100644 --- a/libstdc++-v3/include/experimental/executor +++ b/libstdc++-v3/include/experimental/executor @@ -389,7 +389,7 @@ inline namespace v1 = typename __result_type::completion_handler_type; private: - using __handler_type = conditional_t< + using __handler_type = __conditional_t< is_same<_CompletionToken, completion_handler_type>::value, completion_handler_type&, completion_handler_type>; diff --git a/libstdc++-v3/include/experimental/functional b/libstdc++-v3/include/experimental/functional index 0a2b9381d70..8be2fab1e31 100644 --- a/libstdc++-v3/include/experimental/functional +++ b/libstdc++-v3/include/experimental/functional @@ -164,9 +164,9 @@ inline namespace fundamentals_v1 typename _Val = typename iterator_traits<_RAIter>::value_type, typename _Diff = typename iterator_traits<_RAIter>::difference_type> using __boyer_moore_base_t - = std::conditional_t<std::__is_byte_like<_Val, _Pred>::value, - __boyer_moore_array_base<_Diff, 256, _Pred>, - __boyer_moore_map_base<_Val, _Diff, _Hash, _Pred>>; + = std::__conditional_t<std::__is_byte_like<_Val, _Pred>::value, + __boyer_moore_array_base<_Diff, 256, _Pred>, + __boyer_moore_map_base<_Val, _Diff, _Hash, _Pred>>; template<typename _RAIter, typename _Hash = std::hash<typename std::iterator_traits<_RAIter>::value_type>, |