From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1984) id 6CFA139960D0; Fri, 17 Jul 2020 13:24:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6CFA139960D0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1594992280; bh=hxPiJcdfMLs7qSYV+Yuhxg8oZtXFPLrBF5U+r4hkac8=; h=From:To:Subject:Date:From; b=y006ZBKsmA7MMvwHSkFohMnpNd4DAZXztu+BDPDfxncntgvxJ8TpYeevMD8UIovgu 3ztmsjdpCc+RESM3EomYZxJJv0HfcY+punR84JFPeEg/Z8XDaR+Fd8LGMW9FAUlThp oG17hdCUtJ9bfc8xDsoYxFk1HZ98H0RShWACgy2k= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Tamar Christina To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc(refs/vendors/ARM/heads/arm-perf-staging)] libstdc++: Add __maybe_const_t and __maybe_empty_t aliases X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/vendors/ARM/heads/arm-perf-staging X-Git-Oldrev: 4a305fa2fd4c9d553b26efa00f868aa1e4416a9f X-Git-Newrev: 8017d95c7f55b98bcee1caf0216fdfd7fd613849 Message-Id: <20200717132440.6CFA139960D0@sourceware.org> Date: Fri, 17 Jul 2020 13:24:40 +0000 (GMT) X-BeenThere: libstdc++-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Jul 2020 13:24:40 -0000 https://gcc.gnu.org/g:8017d95c7f55b98bcee1caf0216fdfd7fd613849 commit 8017d95c7f55b98bcee1caf0216fdfd7fd613849 Author: Jonathan Wakely Date: Wed Feb 26 15:19:43 2020 +0000 libstdc++: Add __maybe_const_t and __maybe_empty_t aliases This introduces a couple of convenience alias templates to be used for some repeated patterns using std::conditional_t. * include/std/ranges (__detail::__maybe_empty_t): Define new helper alias. (__detail::__maybe_const_t): Likewise. (__adaptor::_RangeAdaptor): Use __maybe_empty_t. (transform_view, take_view, take_while_view, elements_view): Use __maybe_const_t. (join_view, split_view): Use both. Diff: --- libstdc++-v3/ChangeLog | 10 ++++++++ libstdc++-v3/include/std/ranges | 53 ++++++++++++++++++++++------------------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 071ba3a2a04..c13d6fc48f4 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,13 @@ +2020-02-26 Jonathan Wakely + + * include/std/ranges (__detail::__maybe_empty_t): Define new helper + alias. + (__detail::__maybe_const_t): Likewise. + (__adaptor::_RangeAdaptor): Use __maybe_empty_t. + (transform_view, take_view, take_while_view, elements_view): Use + __maybe_const_t. + (join_view, split_view): Use both. + 2020-02-25 Patrick Palka LWG 3397 basic_istream_view::iterator should not provide diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index a7f4da957ef..d8326632166 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -1029,6 +1029,13 @@ namespace views namespace __detail { struct _Empty { }; + + template + using __maybe_empty_t = conditional_t<_NonEmpty, _Tp, _Empty>; + + template + using __maybe_const_t = conditional_t<_Const, const _Tp, _Tp>; + } // namespace __detail namespace views @@ -1058,8 +1065,8 @@ namespace views { protected: [[no_unique_address]] - conditional_t, - _Callable, __detail::_Empty> _M_callable; + __detail::__maybe_empty_t, + _Callable> _M_callable; public: constexpr @@ -1552,9 +1559,8 @@ namespace views struct _Iterator { private: - using _Parent - = conditional_t<_Const, const transform_view, transform_view>; - using _Base = conditional_t<_Const, const _Vp, _Vp>; + using _Parent = __detail::__maybe_const_t<_Const, transform_view>; + using _Base = __detail::__maybe_const_t<_Const, _Vp>; static constexpr auto _S_iter_concept() @@ -1760,9 +1766,8 @@ namespace views struct _Sentinel { private: - using _Parent - = conditional_t<_Const, const transform_view, transform_view>; - using _Base = conditional_t<_Const, const _Vp, _Vp>; + using _Parent = __detail::__maybe_const_t<_Const, transform_view>; + using _Base = __detail::__maybe_const_t<_Const, _Vp>; constexpr range_difference_t<_Base> __distance_from(const _Iterator<_Const>& __i) const @@ -1886,7 +1891,7 @@ namespace views struct _Sentinel { private: - using _Base = conditional_t<_Const, const _Vp, _Vp>; + using _Base = __detail::__maybe_const_t<_Const, _Vp>; using _CI = counted_iterator>; sentinel_t<_Base> _M_end = sentinel_t<_Base>(); @@ -2025,7 +2030,7 @@ namespace views struct _Sentinel { private: - using _Base = conditional_t<_Const, const _Vp, _Vp>; + using _Base = __detail::__maybe_const_t<_Const, _Vp>; sentinel_t<_Base> _M_end = sentinel_t<_Base>(); const _Pred* _M_pred = nullptr; @@ -2258,8 +2263,8 @@ namespace views struct _Iterator { private: - using _Parent = conditional_t<_Const, const join_view, join_view>; - using _Base = conditional_t<_Const, const _Vp, _Vp>; + using _Parent = __detail::__maybe_const_t<_Const, join_view>; + using _Base = __detail::__maybe_const_t<_Const, _Vp>; static constexpr bool _S_ref_is_glvalue = is_reference_v>; @@ -2450,8 +2455,8 @@ namespace views struct _Sentinel { private: - using _Parent = conditional_t<_Const, const join_view, join_view>; - using _Base = conditional_t<_Const, const _Vp, _Vp>; + using _Parent = __detail::__maybe_const_t<_Const, join_view>; + using _Base = __detail::__maybe_const_t<_Const, _Vp>; constexpr bool __equal(const _Iterator<_Const>& __i) const @@ -2482,8 +2487,8 @@ namespace views // XXX: _M_inner is "present only when !is_reference_v<_InnerRange>" [[no_unique_address]] - conditional_t, - views::all_t<_InnerRange>, __detail::_Empty> _M_inner; + __detail::__maybe_empty_t, + views::all_t<_InnerRange>> _M_inner; public: join_view() = default; @@ -2585,8 +2590,8 @@ namespace views struct _OuterIter { private: - using _Parent = conditional_t<_Const, const split_view, split_view>; - using _Base = conditional_t<_Const, const _Vp, _Vp>; + using _Parent = __detail::__maybe_const_t<_Const, split_view>; + using _Base = __detail::__maybe_const_t<_Const, _Vp>; constexpr bool __at_end() const @@ -2618,8 +2623,8 @@ namespace views // XXX: _M_current is present only if "V models forward_range" [[no_unique_address]] - conditional_t, - iterator_t<_Base>, __detail::_Empty> _M_current; + __detail::__maybe_empty_t, + iterator_t<_Base>> _M_current; public: using iterator_concept = conditional_t, @@ -2732,7 +2737,7 @@ namespace views struct _InnerIter { private: - using _Base = conditional_t<_Const, const _Vp, _Vp>; + using _Base = __detail::__maybe_const_t<_Const, _Vp>; constexpr bool __at_end() const @@ -2858,8 +2863,8 @@ namespace views // XXX: _M_current is "present only if !forward_range" [[no_unique_address]] - conditional_t, - iterator_t<_Vp>, __detail::_Empty> _M_current; + __detail::__maybe_empty_t, iterator_t<_Vp>> + _M_current; public: @@ -3223,7 +3228,7 @@ namespace views template struct _Iterator { - using _Base = conditional_t<_Const, const _Vp, _Vp>; + using _Base = __detail::__maybe_const_t<_Const, _Vp>; iterator_t<_Base> _M_current = iterator_t<_Base>();