From 4c391563407aeba981f6a71423297f36d5ece0ee Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Mon, 2 Mar 2020 17:03:28 +0000 Subject: [PATCH] libstdc++: Rename __detail::__maybe_empty_t alias template The key property of this alias is not that it may be an empty type, but that the type argument may not be used. The fact it's replaced by an empty type is just an implementation detail. The name was also backwards with respect to the bool argument. This patch changes the name to better reflect its purpose. * include/std/ranges (__detail::__maybe_empty_t): Rename to __maybe_present_t. (__adaptor::_RangeAdaptor, join_view, split_view): Use new name. --- libstdc++-v3/ChangeLog | 4 ++++ libstdc++-v3/include/std/ranges | 35 ++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 7a02492339d..d810b0887b5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,9 @@ 2020-03-02 Jonathan Wakely + * include/std/ranges (__detail::__maybe_empty_t): Rename to + __maybe_present_t. + (__adaptor::_RangeAdaptor, join_view, split_view): Use new name. + * include/bits/ranges_algo.h (shift_right): Add 'typename' to dependent type. diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 19d3da950e7..c71cf918cfc 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -1030,9 +1030,14 @@ namespace __detail { struct _Empty { }; - template - using __maybe_empty_t = conditional_t<_NonEmpty, _Tp, _Empty>; - + // Alias for a type that is conditionally present + // (and is an empty type otherwise). + // Data members using this alias should use [[no_unique_address]] so that + // they take no space when not needed. + template + using __maybe_present_t = conditional_t<_Present, _Tp, _Empty>; + + // Alias for a type that is conditionally const. template using __maybe_const_t = conditional_t<_Const, const _Tp, _Tp>; @@ -1065,8 +1070,8 @@ namespace views { protected: [[no_unique_address]] - __detail::__maybe_empty_t, - _Callable> _M_callable; + __detail::__maybe_present_t, + _Callable> _M_callable; public: constexpr @@ -2211,8 +2216,9 @@ namespace views static constexpr bool _S_needs_cached_begin = !random_access_range<_Vp>; [[no_unique_address]] - __detail::__maybe_empty_t<_S_needs_cached_begin, - __detail::_CachedPosition<_Vp>> _M_cached_begin; + __detail::__maybe_present_t<_S_needs_cached_begin, + __detail::_CachedPosition<_Vp>> + _M_cached_begin; public: drop_view() = default; @@ -2592,8 +2598,8 @@ namespace views // XXX: _M_inner is "present only when !is_reference_v<_InnerRange>" [[no_unique_address]] - __detail::__maybe_empty_t, - views::all_t<_InnerRange>> _M_inner; + __detail::__maybe_present_t, + views::all_t<_InnerRange>> _M_inner; public: join_view() = default; @@ -2728,8 +2734,8 @@ namespace views // XXX: _M_current is present only if "V models forward_range" [[no_unique_address]] - __detail::__maybe_empty_t, - iterator_t<_Base>> _M_current; + __detail::__maybe_present_t, + iterator_t<_Base>> _M_current; public: using iterator_concept = conditional_t, @@ -2969,7 +2975,7 @@ namespace views // XXX: _M_current is "present only if !forward_range" [[no_unique_address]] - __detail::__maybe_empty_t, iterator_t<_Vp>> + __detail::__maybe_present_t, iterator_t<_Vp>> _M_current; @@ -3180,8 +3186,9 @@ namespace views static constexpr bool _S_needs_cached_begin = !common_range<_Vp> && !random_access_range<_Vp>; [[no_unique_address]] - __detail::__maybe_empty_t<_S_needs_cached_begin, - __detail::_CachedPosition<_Vp>> _M_cached_begin; + __detail::__maybe_present_t<_S_needs_cached_begin, + __detail::_CachedPosition<_Vp>> + _M_cached_begin; public: reverse_view() = default; -- 2.30.2