From patchwork Wed Aug 4 11:55:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Wakely X-Patchwork-Id: 1513397 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=FANpteCA; dkim-atps=neutral Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Gfqvk54YDz9sRN for ; Wed, 4 Aug 2021 21:56:18 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 89F5B3940CE2 for ; Wed, 4 Aug 2021 11:56:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 89F5B3940CE2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1628078175; bh=n7j53miNO8rZwGwPq5BKP8cs8qsd5UkGwkgy7VOp6qA=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=FANpteCAa1AgmxoAAY2XuW6C4ujzwEePOATa5mb1BhVRUJ3XqDEzueuEU52ObFcR+ K+U1NVGbpUEcKUOWHmJQiH2ntZcCSBQYuQKJC65w4HbHHtf+rD4qF/l/MPgs1aMG6P smGp2YSk1onyVUcCo2pK68qjbRnEXvXdB5lKp/IA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 776FD385382D for ; Wed, 4 Aug 2021 11:55:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 776FD385382D Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-227-DsxABvnrMW2skmOIGTlVdg-1; Wed, 04 Aug 2021 07:55:44 -0400 X-MC-Unique: DsxABvnrMW2skmOIGTlVdg-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 20557107ACF5; Wed, 4 Aug 2021 11:55:43 +0000 (UTC) Received: from localhost (unknown [10.33.36.118]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3C20460854; Wed, 4 Aug 2021 11:55:42 +0000 (UTC) Date: Wed, 4 Aug 2021 12:55:41 +0100 To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: [committed 1/2] libstdc++: Add [[nodiscard]] to iterators and related utilities Message-ID: MIME-Version: 1.0 X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Disposition: inline X-Spam-Status: No, score=-14.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jonathan Wakely via Gcc-patches From: Jonathan Wakely Reply-To: Jonathan Wakely Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" This adds [[nodiscard]] throughout , as proposed by P2377R0 (with some minor corrections). The attribute is added for all modes from C++11 up, using [[__nodiscard__]] or _GLIBCXX_NODISCARD where C++17 [[nodiscard]] can't be used directly. commit 240b01b0215f9e46ecf04267c8a3faeb19d4fe3c Author: Jonathan Wakely Date: Tue Aug 3 18:06:27 2021 libstdc++: Add [[nodiscard]] to iterators and related utilities This adds [[nodiscard]] throughout , as proposed by P2377R0 (with some minor corrections). The attribute is added for all modes from C++11 up, using [[__nodiscard__]] or _GLIBCXX_NODISCARD where C++17 [[nodiscard]] can't be used directly. Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/bits/iterator_concepts.h (iter_move): Add [[nodiscard]]. * include/bits/range_access.h (begin, end, cbegin, cend) (rbegin, rend, crbegin, crend, size, data, ssize): Likewise. * include/bits/ranges_base.h (ranges::begin, ranges::end) (ranges::cbegin, ranges::cend, ranges::rbegin, ranges::rend) (ranges::crbegin, ranges::crend, ranges::size, ranges::ssize) (ranges::empty, ranges::data, ranges::cdata): Likewise. * include/bits/stl_iterator.h (reverse_iterator, __normal_iterator) (back_insert_iterator, front_insert_iterator, insert_iterator) (move_iterator, move_sentinel, common_iterator) (counted_iterator): Likewise. * include/bits/stl_iterator_base_funcs.h (distance, next, prev): Likewise. * include/bits/stream_iterator.h (istream_iterator) (ostream_iterartor): Likewise. * include/bits/streambuf_iterator.h (istreambuf_iterator) (ostreambuf_iterator): Likewise. * include/std/ranges (views::single, views::iota, views::all) (views::filter, views::transform, views::take, views::take_while) (views::drop, views::drop_while, views::join, views::lazy_split) (views::split, views::counted, views::common, views::reverse) (views::elements): Likewise. * testsuite/20_util/rel_ops.cc: Use -Wno-unused-result. * testsuite/24_iterators/move_iterator/greedy_ops.cc: Likewise. * testsuite/24_iterators/normal_iterator/greedy_ops.cc: Likewise. * testsuite/24_iterators/reverse_iterator/2.cc: Likewise. * testsuite/24_iterators/reverse_iterator/greedy_ops.cc: Likewise. * testsuite/21_strings/basic_string/range_access/char/1.cc: Cast result to void. * testsuite/21_strings/basic_string/range_access/wchar_t/1.cc: Likewise. * testsuite/21_strings/basic_string_view/range_access/char/1.cc: Likewise. * testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc: Likewise. * testsuite/23_containers/array/range_access.cc: Likewise. * testsuite/23_containers/deque/range_access.cc: Likewise. * testsuite/23_containers/forward_list/range_access.cc: Likewise. * testsuite/23_containers/list/range_access.cc: Likewise. * testsuite/23_containers/map/range_access.cc: Likewise. * testsuite/23_containers/multimap/range_access.cc: Likewise. * testsuite/23_containers/multiset/range_access.cc: Likewise. * testsuite/23_containers/set/range_access.cc: Likewise. * testsuite/23_containers/unordered_map/range_access.cc: Likewise. * testsuite/23_containers/unordered_multimap/range_access.cc: Likewise. * testsuite/23_containers/unordered_multiset/range_access.cc: Likewise. * testsuite/23_containers/unordered_set/range_access.cc: Likewise. * testsuite/23_containers/vector/range_access.cc: Likewise. * testsuite/24_iterators/customization_points/iter_move.cc: Likewise. * testsuite/24_iterators/istream_iterator/sentinel.cc: Likewise. * testsuite/24_iterators/istreambuf_iterator/sentinel.cc: Likewise. * testsuite/24_iterators/move_iterator/dr2061.cc: Likewise. * testsuite/24_iterators/operations/prev_neg.cc: Likewise. * testsuite/24_iterators/ostreambuf_iterator/2.cc: Likewise. * testsuite/24_iterators/range_access/range_access.cc: Likewise. * testsuite/24_iterators/range_operations/100768.cc: Likewise. * testsuite/26_numerics/valarray/range_access2.cc: Likewise. * testsuite/28_regex/range_access.cc: Likewise. * testsuite/experimental/string_view/range_access/char/1.cc: Likewise. * testsuite/experimental/string_view/range_access/wchar_t/1.cc: Likewise. * testsuite/ext/vstring/range_access.cc: Likewise. * testsuite/std/ranges/adaptors/take.cc: Likewise. * testsuite/std/ranges/p2259.cc: Likewise. diff --git a/libstdc++-v3/include/bits/iterator_concepts.h b/libstdc++-v3/include/bits/iterator_concepts.h index 9c28ebfb345..739017aaaad 100644 --- a/libstdc++-v3/include/bits/iterator_concepts.h +++ b/libstdc++-v3/include/bits/iterator_concepts.h @@ -120,6 +120,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using __type = typename __result<_Tp>::type; template + [[nodiscard]] constexpr __type<_Tp> operator()(_Tp&& __e) const noexcept(_S_noexcept<_Tp>()) diff --git a/libstdc++-v3/include/bits/range_access.h b/libstdc++-v3/include/bits/range_access.h index 71ad28c3ab0..ab2d4f8652c 100644 --- a/libstdc++-v3/include/bits/range_access.h +++ b/libstdc++-v3/include/bits/range_access.h @@ -47,6 +47,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto begin(_Container& __cont) -> decltype(__cont.begin()) { return __cont.begin(); } @@ -57,6 +58,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto begin(const _Container& __cont) -> decltype(__cont.begin()) { return __cont.begin(); } @@ -67,6 +69,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto end(_Container& __cont) -> decltype(__cont.end()) { return __cont.end(); } @@ -77,6 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto end(const _Container& __cont) -> decltype(__cont.end()) { return __cont.end(); } @@ -86,6 +90,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __arr Array. */ template + [[__nodiscard__]] inline _GLIBCXX14_CONSTEXPR _Tp* begin(_Tp (&__arr)[_Nm]) noexcept { return __arr; } @@ -96,6 +101,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __arr Array. */ template + [[__nodiscard__]] inline _GLIBCXX14_CONSTEXPR _Tp* end(_Tp (&__arr)[_Nm]) noexcept { return __arr + _Nm; } @@ -115,6 +121,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline constexpr auto cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont))) -> decltype(std::begin(__cont)) @@ -126,6 +133,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline constexpr auto cend(const _Container& __cont) noexcept(noexcept(std::end(__cont))) -> decltype(std::end(__cont)) @@ -137,6 +145,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto rbegin(_Container& __cont) -> decltype(__cont.rbegin()) { return __cont.rbegin(); } @@ -147,6 +156,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto rbegin(const _Container& __cont) -> decltype(__cont.rbegin()) { return __cont.rbegin(); } @@ -157,6 +167,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto rend(_Container& __cont) -> decltype(__cont.rend()) { return __cont.rend(); } @@ -167,6 +178,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto rend(const _Container& __cont) -> decltype(__cont.rend()) { return __cont.rend(); } @@ -177,6 +189,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __arr Array. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*> rbegin(_Tp (&__arr)[_Nm]) noexcept { return reverse_iterator<_Tp*>(__arr + _Nm); } @@ -187,6 +200,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __arr Array. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*> rend(_Tp (&__arr)[_Nm]) noexcept { return reverse_iterator<_Tp*>(__arr); } @@ -197,6 +211,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __il initializer_list. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR reverse_iterator rbegin(initializer_list<_Tp> __il) noexcept { return reverse_iterator(__il.end()); } @@ -207,6 +222,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __il initializer_list. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR reverse_iterator rend(initializer_list<_Tp> __il) noexcept { return reverse_iterator(__il.begin()); } @@ -217,6 +233,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto crbegin(const _Container& __cont) -> decltype(std::rbegin(__cont)) { return std::rbegin(__cont); } @@ -227,6 +244,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto crend(const _Container& __cont) -> decltype(std::rend(__cont)) { return std::rend(__cont); } @@ -241,6 +259,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[nodiscard]] constexpr auto size(const _Container& __cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size()) @@ -250,6 +269,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @brief Return the size of an array. */ template + [[nodiscard]] constexpr size_t size(const _Tp (&)[_Nm]) noexcept { return _Nm; } @@ -286,6 +306,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[nodiscard]] constexpr auto data(_Container& __cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data()) @@ -296,6 +317,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __cont Container. */ template + [[nodiscard]] constexpr auto data(const _Container& __cont) noexcept(noexcept(__cont.data())) -> decltype(__cont.data()) @@ -306,6 +328,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __array Array. */ template + [[nodiscard]] constexpr _Tp* data(_Tp (&__array)[_Nm]) noexcept { return __array; } @@ -315,6 +338,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @param __il Initializer list. */ template + [[nodiscard]] constexpr const _Tp* data(initializer_list<_Tp> __il) noexcept { return __il.begin(); } @@ -322,6 +346,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus > 201703L #define __cpp_lib_ssize 201902L template + [[nodiscard]] constexpr auto ssize(const _Container& __cont) noexcept(noexcept(__cont.size())) @@ -332,6 +357,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template + [[nodiscard]] constexpr ptrdiff_t ssize(const _Tp (&)[_Num]) noexcept { return _Num; } diff --git a/libstdc++-v3/include/bits/ranges_base.h b/libstdc++-v3/include/bits/ranges_base.h index 9d749c8d9b7..614b6edf9df 100644 --- a/libstdc++-v3/include/bits/ranges_base.h +++ b/libstdc++-v3/include/bits/ranges_base.h @@ -110,6 +110,7 @@ namespace ranges template<__maybe_borrowed_range _Tp> requires is_array_v> || __member_begin<_Tp> || __adl_begin<_Tp> + [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { @@ -161,6 +162,7 @@ namespace ranges template<__maybe_borrowed_range _Tp> requires is_bounded_array_v> || __member_end<_Tp> || __adl_end<_Tp> + [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { @@ -192,6 +194,7 @@ namespace ranges struct _CBegin { template + [[nodiscard]] constexpr auto operator()(_Tp&& __e) const noexcept(noexcept(_Begin{}(__cust_access::__as_const<_Tp>(__e)))) @@ -204,6 +207,7 @@ namespace ranges struct _CEnd final { template + [[nodiscard]] constexpr auto operator()(_Tp&& __e) const noexcept(noexcept(_End{}(__cust_access::__as_const<_Tp>(__e)))) @@ -263,6 +267,7 @@ namespace ranges public: template<__maybe_borrowed_range _Tp> requires __member_rbegin<_Tp> || __adl_rbegin<_Tp> || __reversable<_Tp> + [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) @@ -321,6 +326,7 @@ namespace ranges public: template<__maybe_borrowed_range _Tp> requires __member_rend<_Tp> || __adl_rend<_Tp> || __reversable<_Tp> + [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) @@ -337,6 +343,7 @@ namespace ranges struct _CRBegin { template + [[nodiscard]] constexpr auto operator()(_Tp&& __e) const noexcept(noexcept(_RBegin{}(__cust_access::__as_const<_Tp>(__e)))) @@ -349,6 +356,7 @@ namespace ranges struct _CREnd { template + [[nodiscard]] constexpr auto operator()(_Tp&& __e) const noexcept(noexcept(_REnd{}(__cust_access::__as_const<_Tp>(__e)))) @@ -408,6 +416,7 @@ namespace ranges template requires is_bounded_array_v> || __member_size<_Tp> || __adl_size<_Tp> || __sentinel_size<_Tp> + [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { @@ -428,6 +437,7 @@ namespace ranges // 3403. Domain of ranges::ssize(E) doesn't match ranges::size(E) template requires requires (_Tp& __t) { _Size{}(__t); } + [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(noexcept(_Size{}(__t))) { @@ -487,6 +497,7 @@ namespace ranges template requires __member_empty<_Tp> || __size0_empty<_Tp> || __eq_iter_empty<_Tp> + [[nodiscard]] constexpr bool operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { @@ -528,6 +539,7 @@ namespace ranges public: template<__maybe_borrowed_range _Tp> requires __member_data<_Tp> || __begin_data<_Tp> + [[nodiscard]] constexpr auto operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp>()) { @@ -541,6 +553,7 @@ namespace ranges struct _CData { template + [[nodiscard]] constexpr auto operator()(_Tp&& __e) const noexcept(noexcept(_Data{}(__cust_access::__as_const<_Tp>(__e)))) @@ -782,6 +795,7 @@ namespace ranges struct __distance_fn final { template _Sent> + [[nodiscard]] constexpr iter_difference_t<_It> operator()(_It __first, _Sent __last) const { @@ -800,6 +814,7 @@ namespace ranges } template + [[nodiscard]] constexpr range_difference_t<_Range> operator()(_Range&& __r) const { @@ -817,6 +832,7 @@ namespace ranges struct __next_fn final { template + [[nodiscard]] constexpr _It operator()(_It __x) const { @@ -825,6 +841,7 @@ namespace ranges } template + [[nodiscard]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n) const { @@ -833,6 +850,7 @@ namespace ranges } template _Sent> + [[nodiscard]] constexpr _It operator()(_It __x, _Sent __bound) const { @@ -841,6 +859,7 @@ namespace ranges } template _Sent> + [[nodiscard]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n, _Sent __bound) const { @@ -856,6 +875,7 @@ namespace ranges struct __prev_fn final { template + [[nodiscard]] constexpr _It operator()(_It __x) const { @@ -864,6 +884,7 @@ namespace ranges } template + [[nodiscard]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n) const { @@ -872,6 +893,7 @@ namespace ranges } template + [[nodiscard]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n, _It __bound) const { diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h index 7fe727d8093..3773d600b8f 100644 --- a/libstdc++-v3/include/bits/stl_iterator.h +++ b/libstdc++-v3/include/bits/stl_iterator.h @@ -223,6 +223,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @return @c current, the %iterator used for underlying work. */ + _GLIBCXX_NODISCARD _GLIBCXX17_CONSTEXPR iterator_type base() const { return current; } @@ -237,6 +238,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @c *x remains valid after @c x has been modified or * destroyed. This is a bug: http://gcc.gnu.org/PR51823 */ + _GLIBCXX_NODISCARD _GLIBCXX17_CONSTEXPR reference operator*() const { @@ -249,6 +251,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * * This requires that @c --current is dereferenceable. */ + _GLIBCXX_NODISCARD _GLIBCXX17_CONSTEXPR pointer operator->() const #if __cplusplus > 201703L && __cpp_concepts >= 201907L @@ -318,6 +321,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * * The underlying iterator must be a Random Access Iterator. */ + _GLIBCXX_NODISCARD _GLIBCXX17_CONSTEXPR reverse_iterator operator+(difference_type __n) const { return reverse_iterator(current - __n); } @@ -340,6 +344,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * * The underlying iterator must be a Random Access Iterator. */ + _GLIBCXX_NODISCARD _GLIBCXX17_CONSTEXPR reverse_iterator operator-(difference_type __n) const { return reverse_iterator(current + __n); } @@ -362,11 +367,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * * The underlying iterator must be a Random Access Iterator. */ + _GLIBCXX_NODISCARD _GLIBCXX17_CONSTEXPR reference operator[](difference_type __n) const { return *(*this + __n); } #if __cplusplus > 201703L && __cpp_lib_concepts + [[nodiscard]] friend constexpr iter_rvalue_reference_t<_Iterator> iter_move(const reverse_iterator& __i) noexcept(is_nothrow_copy_constructible_v<_Iterator> @@ -415,36 +422,42 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ #if __cplusplus <= 201703L || ! defined __cpp_lib_concepts template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator==(const reverse_iterator<_Iterator>& __x, const reverse_iterator<_Iterator>& __y) { return __x.base() == __y.base(); } template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator<(const reverse_iterator<_Iterator>& __x, const reverse_iterator<_Iterator>& __y) { return __y.base() < __x.base(); } template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator!=(const reverse_iterator<_Iterator>& __x, const reverse_iterator<_Iterator>& __y) { return !(__x == __y); } template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator>(const reverse_iterator<_Iterator>& __x, const reverse_iterator<_Iterator>& __y) { return __y < __x; } template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator<=(const reverse_iterator<_Iterator>& __x, const reverse_iterator<_Iterator>& __y) { return !(__y < __x); } template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator>=(const reverse_iterator<_Iterator>& __x, const reverse_iterator<_Iterator>& __y) @@ -454,24 +467,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // DR 280. Comparison of reverse_iterator to const reverse_iterator. template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator==(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) { return __x.base() == __y.base(); } template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator<(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) { return __x.base() > __y.base(); } template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator!=(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) { return __x.base() != __y.base(); } template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator>(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) @@ -484,12 +501,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __x.base() >= __y.base(); } template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR bool operator>=(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) { return __x.base() <= __y.base(); } #else // C++20 template + [[nodiscard]] constexpr bool operator==(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) @@ -497,6 +516,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __x.base() == __y.base(); } template + [[nodiscard]] constexpr bool operator!=(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) @@ -504,6 +524,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __x.base() != __y.base(); } template + [[nodiscard]] constexpr bool operator<(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) @@ -511,6 +532,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __x.base() > __y.base(); } template + [[nodiscard]] constexpr bool operator>(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) @@ -518,6 +540,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __x.base() < __y.base(); } template + [[nodiscard]] constexpr bool operator<=(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) @@ -525,6 +548,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __x.base() >= __y.base(); } template + [[nodiscard]] constexpr bool operator>=(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) @@ -533,6 +557,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template _IteratorR> + [[nodiscard]] constexpr compare_three_way_result_t<_IteratorL, _IteratorR> operator<=>(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) @@ -556,6 +581,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // _GLIBCXX_RESOLVE_LIB_DEFECTS // DR 685. reverse_iterator/move_iterator difference has invalid signatures template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto operator-(const reverse_iterator<_IteratorL>& __x, const reverse_iterator<_IteratorR>& __y) @@ -564,6 +590,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator> operator+(typename reverse_iterator<_Iterator>::difference_type __n, const reverse_iterator<_Iterator>& __x) @@ -583,6 +610,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // DR 2285. make_reverse_iterator /// Generator function for reverse_iterator. template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator> make_reverse_iterator(_Iterator __i) { return reverse_iterator<_Iterator>(__i); } @@ -683,7 +711,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif /// Simply returns *this. - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR back_insert_iterator& operator*() { return *this; } @@ -713,7 +741,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * types for you. */ template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline back_insert_iterator<_Container> back_inserter(_Container& __x) { return back_insert_iterator<_Container>(__x); } @@ -784,7 +812,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif /// Simply returns *this. - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR front_insert_iterator& operator*() { return *this; } @@ -814,7 +842,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * types for you. */ template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline front_insert_iterator<_Container> front_inserter(_Container& __x) { return front_insert_iterator<_Container>(__x); } @@ -914,7 +942,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif /// Simply returns *this. - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR insert_iterator& operator*() { return *this; } @@ -946,11 +974,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ #if __cplusplus > 201703L && defined __cpp_lib_concepts template + [[nodiscard]] constexpr insert_iterator<_Container> inserter(_Container& __x, std::__detail::__range_iter_t<_Container> __i) { return insert_iterator<_Container>(__x, __i); } #else template + _GLIBCXX_NODISCARD inline insert_iterator<_Container> inserter(_Container& __x, typename _Container::iterator __i) { return insert_iterator<_Container>(__x, __i); } @@ -1090,6 +1120,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template requires requires (_IteratorL __lhs, _IteratorR __rhs) { { __lhs == __rhs } -> std::convertible_to; } + [[nodiscard]] constexpr bool operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) @@ -1097,6 +1128,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() == __rhs.base(); } template + [[nodiscard]] constexpr std::__detail::__synth3way_t<_IteratorR, _IteratorL> operator<=>(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) @@ -1105,7 +1137,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #else // Forward iterator requirements template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) @@ -1113,7 +1145,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() == __rhs.base(); } template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool operator==(const __normal_iterator<_Iterator, _Container>& __lhs, const __normal_iterator<_Iterator, _Container>& __rhs) @@ -1121,7 +1153,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() == __rhs.base(); } template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) @@ -1129,7 +1161,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() != __rhs.base(); } template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool operator!=(const __normal_iterator<_Iterator, _Container>& __lhs, const __normal_iterator<_Iterator, _Container>& __rhs) @@ -1138,6 +1170,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Random access iterator requirements template + _GLIBCXX_NODISCARD inline bool operator<(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) @@ -1145,7 +1178,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() < __rhs.base(); } template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool operator<(const __normal_iterator<_Iterator, _Container>& __lhs, const __normal_iterator<_Iterator, _Container>& __rhs) @@ -1153,6 +1186,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() < __rhs.base(); } template + _GLIBCXX_NODISCARD inline bool operator>(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) @@ -1160,7 +1194,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() > __rhs.base(); } template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool operator>(const __normal_iterator<_Iterator, _Container>& __lhs, const __normal_iterator<_Iterator, _Container>& __rhs) @@ -1168,6 +1202,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() > __rhs.base(); } template + _GLIBCXX_NODISCARD inline bool operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) @@ -1175,7 +1210,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() <= __rhs.base(); } template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool operator<=(const __normal_iterator<_Iterator, _Container>& __lhs, const __normal_iterator<_Iterator, _Container>& __rhs) @@ -1183,6 +1218,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() <= __rhs.base(); } template + _GLIBCXX_NODISCARD inline bool operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) @@ -1190,7 +1226,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() >= __rhs.base(); } template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool operator>=(const __normal_iterator<_Iterator, _Container>& __lhs, const __normal_iterator<_Iterator, _Container>& __rhs) @@ -1205,7 +1241,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template #if __cplusplus >= 201103L // DR 685. - _GLIBCXX20_CONSTEXPR + [[__nodiscard__]] _GLIBCXX20_CONSTEXPR inline auto operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept @@ -1218,7 +1254,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() - __rhs.base(); } template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline typename __normal_iterator<_Iterator, _Container>::difference_type operator-(const __normal_iterator<_Iterator, _Container>& __lhs, const __normal_iterator<_Iterator, _Container>& __rhs) @@ -1226,7 +1262,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __lhs.base() - __rhs.base(); } template - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline __normal_iterator<_Iterator, _Container> operator+(typename __normal_iterator<_Iterator, _Container>::difference_type __n, const __normal_iterator<_Iterator, _Container>& __i) @@ -1284,6 +1320,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *this; } + [[nodiscard]] constexpr _Sent base() const noexcept(is_nothrow_copy_constructible_v<_Sent>) @@ -1397,19 +1434,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #if __cplusplus <= 201703L + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR iterator_type base() const { return _M_current; } #else + [[nodiscard]] constexpr const iterator_type& base() const & noexcept { return _M_current; } + [[nodiscard]] constexpr iterator_type base() && { return std::move(_M_current); } #endif + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR reference operator*() const #if __cplusplus > 201703L && __cpp_lib_concepts @@ -1418,6 +1459,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return static_cast(*_M_current); } #endif + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR pointer operator->() const { return _M_current; } @@ -1458,6 +1500,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __tmp; } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR move_iterator operator+(difference_type __n) const { return move_iterator(_M_current + __n); } @@ -1469,6 +1512,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *this; } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR move_iterator operator-(difference_type __n) const { return move_iterator(_M_current - __n); } @@ -1480,6 +1524,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *this; } + [[__nodiscard__]] _GLIBCXX17_CONSTEXPR reference operator[](difference_type __n) const #if __cplusplus > 201703L && __cpp_lib_concepts @@ -1490,20 +1535,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus > 201703L && __cpp_lib_concepts template _Sent> + [[nodiscard]] friend constexpr bool operator==(const move_iterator& __x, const move_sentinel<_Sent>& __y) { return __x.base() == __y.base(); } template _Sent> + [[nodiscard]] friend constexpr iter_difference_t<_Iterator> operator-(const move_sentinel<_Sent>& __x, const move_iterator& __y) { return __x.base() - __y.base(); } template _Sent> + [[nodiscard]] friend constexpr iter_difference_t<_Iterator> operator-(const move_iterator& __x, const move_sentinel<_Sent>& __y) { return __x.base() - __y.base(); } + [[nodiscard]] friend constexpr iter_rvalue_reference_t<_Iterator> iter_move(const move_iterator& __i) noexcept(noexcept(ranges::iter_move(__i._M_current))) @@ -1518,6 +1567,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator==(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) @@ -1529,12 +1579,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cpp_lib_three_way_comparison template _IteratorR> + [[__nodiscard__]] constexpr compare_three_way_result_t<_IteratorL, _IteratorR> operator<=>(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) { return __x.base() <=> __y.base(); } #else template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator!=(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) @@ -1542,6 +1594,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator<(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) @@ -1551,6 +1604,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __x.base() < __y.base(); } template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator<=(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) @@ -1560,6 +1614,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return !(__y < __x); } template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator>(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) @@ -1569,6 +1624,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __y < __x; } template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator>=(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) @@ -1586,36 +1642,42 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // prefer them to greedy unconstrained function templates. template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator==(const move_iterator<_Iterator>& __x, const move_iterator<_Iterator>& __y) { return __x.base() == __y.base(); } template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator!=(const move_iterator<_Iterator>& __x, const move_iterator<_Iterator>& __y) { return !(__x == __y); } template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator<(const move_iterator<_Iterator>& __x, const move_iterator<_Iterator>& __y) { return __x.base() < __y.base(); } template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator<=(const move_iterator<_Iterator>& __x, const move_iterator<_Iterator>& __y) { return !(__y < __x); } template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator>(const move_iterator<_Iterator>& __x, const move_iterator<_Iterator>& __y) { return __y < __x; } template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR bool operator>=(const move_iterator<_Iterator>& __x, const move_iterator<_Iterator>& __y) @@ -1624,6 +1686,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // DR 685. template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR auto operator-(const move_iterator<_IteratorL>& __x, const move_iterator<_IteratorR>& __y) @@ -1631,12 +1694,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __x.base() - __y.base(); } template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator> operator+(typename move_iterator<_Iterator>::difference_type __n, const move_iterator<_Iterator>& __x) { return __x + __n; } template + [[__nodiscard__]] inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator> make_move_iterator(_Iterator __i) { return move_iterator<_Iterator>(std::move(__i)); } @@ -1857,6 +1922,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } } + [[nodiscard]] decltype(auto) operator*() { @@ -1864,6 +1930,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *_M_it; } + [[nodiscard]] decltype(auto) operator*() const requires __detail::__dereferenceable { @@ -1871,6 +1938,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *_M_it; } + [[nodiscard]] decltype(auto) operator->() const requires __detail::__common_iter_has_arrow<_It> { @@ -1916,6 +1984,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template _Sent2> requires sentinel_for<_Sent, _It2> + [[nodiscard]] friend bool operator==(const common_iterator& __x, const common_iterator<_It2, _Sent2>& __y) @@ -1938,6 +2007,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template _Sent2> requires sentinel_for<_Sent, _It2> && equality_comparable_with<_It, _It2> + [[nodiscard]] friend bool operator==(const common_iterator& __x, const common_iterator<_It2, _Sent2>& __y) @@ -1961,6 +2031,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template _It2, sized_sentinel_for<_It> _Sent2> requires sized_sentinel_for<_Sent, _It2> + [[nodiscard]] friend iter_difference_t<_It2> operator-(const common_iterator& __x, const common_iterator<_It2, _Sent2>& __y) @@ -1982,6 +2053,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } } + [[nodiscard]] friend iter_rvalue_reference_t<_It> iter_move(const common_iterator& __i) noexcept(noexcept(ranges::iter_move(std::declval()))) @@ -2132,18 +2204,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *this; } + [[nodiscard]] constexpr const _It& base() const & noexcept { return _M_current; } + [[nodiscard]] constexpr _It base() && noexcept(is_nothrow_move_constructible_v<_It>) { return std::move(_M_current); } + [[nodiscard]] constexpr iter_difference_t<_It> count() const noexcept { return _M_length; } + [[nodiscard]] constexpr decltype(auto) operator*() noexcept(noexcept(*_M_current)) @@ -2152,6 +2228,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *_M_current; } + [[nodiscard]] constexpr decltype(auto) operator*() const noexcept(noexcept(*_M_current)) @@ -2161,6 +2238,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *_M_current; } + [[nodiscard]] constexpr auto operator->() const noexcept requires contiguous_iterator<_It> @@ -2214,11 +2292,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __tmp; } + [[nodiscard]] constexpr counted_iterator operator+(iter_difference_t<_It> __n) const requires random_access_iterator<_It> { return counted_iterator(_M_current + __n, _M_length - __n); } + [[nodiscard]] friend constexpr counted_iterator operator+(iter_difference_t<_It> __n, const counted_iterator& __x) requires random_access_iterator<_It> @@ -2234,21 +2314,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *this; } + [[nodiscard]] constexpr counted_iterator operator-(iter_difference_t<_It> __n) const requires random_access_iterator<_It> { return counted_iterator(_M_current - __n, _M_length + __n); } template _It2> + [[nodiscard]] friend constexpr iter_difference_t<_It2> operator-(const counted_iterator& __x, const counted_iterator<_It2>& __y) { return __y._M_length - __x._M_length; } + [[nodiscard]] friend constexpr iter_difference_t<_It> operator-(const counted_iterator& __x, default_sentinel_t) { return -__x._M_length; } + [[nodiscard]] friend constexpr iter_difference_t<_It> operator-(default_sentinel_t, const counted_iterator& __y) { return __y._M_length; } @@ -2263,6 +2347,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *this; } + [[nodiscard]] constexpr decltype(auto) operator[](iter_difference_t<_It> __n) const noexcept(noexcept(_M_current[__n])) @@ -2273,21 +2358,25 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } template _It2> + [[nodiscard]] friend constexpr bool operator==(const counted_iterator& __x, const counted_iterator<_It2>& __y) { return __x._M_length == __y._M_length; } + [[nodiscard]] friend constexpr bool operator==(const counted_iterator& __x, default_sentinel_t) { return __x._M_length == 0; } template _It2> + [[nodiscard]] friend constexpr strong_ordering operator<=>(const counted_iterator& __x, const counted_iterator<_It2>& __y) { return __y._M_length <=> __x._M_length; } + [[nodiscard]] friend constexpr iter_rvalue_reference_t<_It> iter_move(const counted_iterator& __i) noexcept(noexcept(ranges::iter_move(__i._M_current))) diff --git a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h index fa8474f23c6..e5afab7f4fd 100644 --- a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h +++ b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h @@ -133,6 +133,7 @@ _GLIBCXX_END_NAMESPACE_CONTAINER * and are constant time. For other %iterator classes they are linear time. */ template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR typename iterator_traits<_InputIterator>::difference_type distance(_InputIterator __first, _InputIterator __last) @@ -209,6 +210,7 @@ _GLIBCXX_END_NAMESPACE_CONTAINER #if __cplusplus >= 201103L template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR _InputIterator next(_InputIterator __x, typename iterator_traits<_InputIterator>::difference_type __n = 1) @@ -220,6 +222,7 @@ _GLIBCXX_END_NAMESPACE_CONTAINER } template + _GLIBCXX_NODISCARD inline _GLIBCXX17_CONSTEXPR _BidirectionalIterator prev(_BidirectionalIterator __x, typename iterator_traits<_BidirectionalIterator>::difference_type __n = 1) diff --git a/libstdc++-v3/include/bits/stream_iterator.h b/libstdc++-v3/include/bits/stream_iterator.h index d07474d4996..d74c158f342 100644 --- a/libstdc++-v3/include/bits/stream_iterator.h +++ b/libstdc++-v3/include/bits/stream_iterator.h @@ -89,6 +89,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ~istream_iterator() = default; #endif + _GLIBCXX_NODISCARD const _Tp& operator*() const { @@ -98,6 +99,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return _M_value; } + _GLIBCXX_NODISCARD const _Tp* operator->() const { return std::__addressof((operator*())); } @@ -143,17 +145,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// Return true if the iterators refer to the same stream, /// or are both at end-of-stream. + _GLIBCXX_NODISCARD friend bool operator==(const istream_iterator& __x, const istream_iterator& __y) { return __x._M_equal(__y); } +#if __cpp_impl_three_way_comparison < 201907L /// Return true if the iterators refer to different streams, /// or if one is at end-of-stream and the other is not. + _GLIBCXX_NODISCARD friend bool operator!=(const istream_iterator& __x, const istream_iterator& __y) { return !__x._M_equal(__y); } +#endif #if __cplusplus > 201703L && __cpp_lib_concepts + [[nodiscard]] friend bool operator==(const istream_iterator& __i, default_sentinel_t) { return !__i._M_stream; } @@ -231,6 +238,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return *this; } + _GLIBCXX_NODISCARD ostream_iterator& operator*() { return *this; } diff --git a/libstdc++-v3/include/bits/streambuf_iterator.h b/libstdc++-v3/include/bits/streambuf_iterator.h index cda596af40f..0a77d1a3da4 100644 --- a/libstdc++-v3/include/bits/streambuf_iterator.h +++ b/libstdc++-v3/include/bits/streambuf_iterator.h @@ -141,6 +141,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// Return the current character pointed to by iterator. This returns /// streambuf.sgetc(). It cannot be assigned. NB: The result of /// operator*() on an end of stream is undefined. + _GLIBCXX_NODISCARD char_type operator*() const { @@ -189,6 +190,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // 110 istreambuf_iterator::equal not const // NB: there is also number 111 (NAD) relevant to this function. /// Return true both iterators are end or both are not end. + _GLIBCXX_NODISCARD bool equal(const istreambuf_iterator& __b) const { return _M_at_eof() == __b._M_at_eof(); } @@ -215,6 +217,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #if __cplusplus > 201703L && __cpp_lib_concepts + [[nodiscard]] friend bool operator==(const istreambuf_iterator& __i, default_sentinel_t __s) { return __i._M_at_eof(); } @@ -222,16 +225,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; template + _GLIBCXX_NODISCARD inline bool operator==(const istreambuf_iterator<_CharT, _Traits>& __a, const istreambuf_iterator<_CharT, _Traits>& __b) { return __a.equal(__b); } +#if __cpp_impl_three_way_comparison < 201907L template + _GLIBCXX_NODISCARD inline bool operator!=(const istreambuf_iterator<_CharT, _Traits>& __a, const istreambuf_iterator<_CharT, _Traits>& __b) { return !__a.equal(__b); } +#endif /// Provides output iterator semantics for streambufs. template @@ -288,6 +295,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } /// Return *this. + _GLIBCXX_NODISCARD ostreambuf_iterator& operator*() { return *this; } @@ -303,6 +311,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return *this; } /// Return true if previous operator=() failed. + _GLIBCXX_NODISCARD bool failed() const _GLIBCXX_USE_NOEXCEPT { return _M_failed; } diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 5bdcd445a9e..03a3778bb52 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -645,6 +645,7 @@ namespace views struct _Single { template + [[nodiscard]] constexpr auto operator()(_Tp&& __e) const noexcept(noexcept(single_view>(std::forward<_Tp>(__e)))) @@ -656,11 +657,13 @@ namespace views struct _Iota { template + [[nodiscard]] constexpr auto operator()(_Tp&& __e) const { return iota_view(std::forward<_Tp>(__e)); } template + [[nodiscard]] constexpr auto operator()(_Tp&& __e, _Up&& __f) const { return iota_view(std::forward<_Tp>(__e), std::forward<_Up>(__f)); } @@ -1123,6 +1126,7 @@ namespace views::__adaptor requires view> || __detail::__can_ref_view<_Range> || __detail::__can_subrange<_Range> + [[nodiscard]] constexpr auto operator()(_Range&& __r) const noexcept(_S_noexcept<_Range>()) @@ -1549,6 +1553,7 @@ namespace views::__adaptor { template requires __detail::__can_filter_view<_Range, _Pred> + [[nodiscard]] constexpr auto operator()(_Range&& __r, _Pred&& __p) const { @@ -1926,6 +1931,7 @@ namespace views::__adaptor { template requires __detail::__can_transform_view<_Range, _Fp> + [[nodiscard]] constexpr auto operator()(_Range&& __r, _Fp&& __f) const { @@ -2107,6 +2113,7 @@ namespace views::__adaptor { template requires __detail::__can_take_view<_Range, _Tp> + [[nodiscard]] constexpr auto operator()(_Range&& __r, _Tp&& __n) const { @@ -2234,6 +2241,7 @@ namespace views::__adaptor { template requires __detail::__can_take_while_view<_Range, _Pred> + [[nodiscard]] constexpr auto operator()(_Range&& __r, _Pred&& __p) const { @@ -2354,6 +2362,7 @@ namespace views::__adaptor { template requires __detail::__can_drop_view<_Range, _Tp> + [[nodiscard]] constexpr auto operator()(_Range&& __r, _Tp&& __n) const { @@ -2442,6 +2451,7 @@ namespace views::__adaptor { template requires __detail::__can_drop_while_view<_Range, _Pred> + [[nodiscard]] constexpr auto operator()(_Range&& __r, _Pred&& __p) const { @@ -2804,6 +2814,7 @@ namespace views::__adaptor { template requires __detail::__can_join_view<_Range> + [[nodiscard]] constexpr auto operator()(_Range&& __r) const { @@ -3255,6 +3266,7 @@ namespace views::__adaptor { template requires __detail::__can_lazy_split_view<_Range, _Pattern> + [[nodiscard]] constexpr auto operator()(_Range&& __r, _Pattern&& __f) const { @@ -3463,6 +3475,7 @@ namespace views::__adaptor { template requires __detail::__can_split_view<_Range, _Pattern> + [[nodiscard]] constexpr auto operator()(_Range&& __r, _Pattern&& __f) const { @@ -3484,6 +3497,7 @@ namespace views::__adaptor struct _Counted { template + [[nodiscard]] constexpr auto operator()(_Iter __i, iter_difference_t<_Iter> __n) const { @@ -3605,6 +3619,7 @@ namespace views::__adaptor template requires __detail::__already_common<_Range> || __detail::__can_common_view<_Range> + [[nodiscard]] constexpr auto operator()(_Range&& __r) const { @@ -3727,6 +3742,7 @@ namespace views::__adaptor requires __detail::__is_reverse_view> || __detail::__is_reversible_subrange> || __detail::__can_reverse_view<_Range> + [[nodiscard]] constexpr auto operator()(_Range&& __r) const { @@ -4125,6 +4141,7 @@ namespace views::__adaptor { template requires __detail::__can_elements_view<_Nm, _Range> + [[nodiscard]] constexpr auto operator()(_Range&& __r) const { diff --git a/libstdc++-v3/testsuite/20_util/rel_ops.cc b/libstdc++-v3/testsuite/20_util/rel_ops.cc index 4726462e64e..dd2c14650ae 100644 --- a/libstdc++-v3/testsuite/20_util/rel_ops.cc +++ b/libstdc++-v3/testsuite/20_util/rel_ops.cc @@ -17,6 +17,8 @@ // with this library; see the file COPYING3. If not see // . +// { dg-options "-Wno-unused-result" } + // 20.2.1 Operators #include diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc index 90574d2a811..d37b1cb4c4e 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc @@ -25,6 +25,6 @@ void test01() { std::string s("Hello, World!"); - std::begin(s); - std::end(s); + (void) std::begin(s); + (void) std::end(s); } diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc index beab3110ca2..56169150089 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc @@ -26,7 +26,7 @@ test01() { #ifdef _GLIBCXX_USE_WCHAR_T std::wstring ws(L"Hello, World!"); - std::begin(ws); - std::end(ws); + (void) std::begin(ws); + (void) std::end(ws); #endif } diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc index 856aafde552..4a3595663b8 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/char/1.cc @@ -25,10 +25,10 @@ void test01() { std::string_view s("Hello, World!"); - std::begin(s); - std::end(s); - std::rbegin(s); - std::rend(s); + (void) std::begin(s); + (void) std::end(s); + (void) std::rbegin(s); + (void) std::rend(s); } void diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc index c6d83c47bfd..f8ecd1a84cd 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/range_access/wchar_t/1.cc @@ -25,10 +25,10 @@ void test01() { std::wstring_view ws(L"Hello, World!"); - std::begin(ws); - std::end(ws); - std::rbegin(ws); - std::rend(ws); + (void) std::begin(ws); + (void) std::end(ws); + (void) std::rbegin(ws); + (void) std::rend(ws); } void diff --git a/libstdc++-v3/testsuite/23_containers/array/range_access.cc b/libstdc++-v3/testsuite/23_containers/array/range_access.cc index 38116888a6c..807ccdb2b01 100644 --- a/libstdc++-v3/testsuite/23_containers/array/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/array/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::array a{{1, 2, 3}}; - std::begin(a); - std::end(a); + (void) std::begin(a); + (void) std::end(a); } diff --git a/libstdc++-v3/testsuite/23_containers/deque/range_access.cc b/libstdc++-v3/testsuite/23_containers/deque/range_access.cc index fed56a48414..990fc0d573b 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::deque d{1, 2, 3}; - std::begin(d); - std::end(d); + (void) std::begin(d); + (void) std::end(d); } diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc b/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc index 0b70ff02131..6398240e126 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::forward_list fl{1, 2, 3}; - std::begin(fl); - std::end(fl); + (void) std::begin(fl); + (void) std::end(fl); } diff --git a/libstdc++-v3/testsuite/23_containers/list/range_access.cc b/libstdc++-v3/testsuite/23_containers/list/range_access.cc index de845d446f0..15047ec755d 100644 --- a/libstdc++-v3/testsuite/23_containers/list/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/list/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::list l{1, 2, 3}; - std::begin(l); - std::end(l); + (void) std::begin(l); + (void) std::end(l); } diff --git a/libstdc++-v3/testsuite/23_containers/map/range_access.cc b/libstdc++-v3/testsuite/23_containers/map/range_access.cc index dc0bdbb9a74..3c6b00128ca 100644 --- a/libstdc++-v3/testsuite/23_containers/map/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/map/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::map m{{1, 1.0}, {2, 2.0}, {3, 3.0}}; - std::begin(m); - std::end(m); + (void) std::begin(m); + (void) std::end(m); } diff --git a/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc b/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc index 32ffa3b2651..020a7a9e627 100644 --- a/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::multimap mm{{1, 1.0}, {2, 2.0}, {3, 3.0}}; - std::begin(mm); - std::end(mm); + (void) std::begin(mm); + (void) std::end(mm); } diff --git a/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc b/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc index 2d08ba40a59..7e66bfa24aa 100644 --- a/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::multiset ms{1, 2, 3}; - std::begin(ms); - std::end(ms); + (void) std::begin(ms); + (void) std::end(ms); } diff --git a/libstdc++-v3/testsuite/23_containers/set/range_access.cc b/libstdc++-v3/testsuite/23_containers/set/range_access.cc index 35703e2a7be..66099b39df4 100644 --- a/libstdc++-v3/testsuite/23_containers/set/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/set/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::set s{1, 2, 3}; - std::begin(s); - std::end(s); + (void) std::begin(s); + (void) std::end(s); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc index edb06d06894..ad20c1da942 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::unordered_map um{{1, 1.0}, {2, 2.0}, {3, 3.0}}; - std::begin(um); - std::end(um); + (void) std::begin(um); + (void) std::end(um); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc index e19e825a042..4bb126e34f9 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::unordered_multimap umm{{1, 1.0}, {2, 2.0}, {3, 3.0}}; - std::begin(umm); - std::end(umm); + (void) std::begin(umm); + (void) std::end(umm); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc index 574012bee32..899b74af35c 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::unordered_multiset ums{1, 2, 3}; - std::begin(ums); - std::end(ums); + (void) std::begin(ums); + (void) std::end(ums); } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc index 033653a37ec..4f9e8857113 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc @@ -25,6 +25,6 @@ void test01() { std::unordered_set us{1, 2, 3}; - std::begin(us); - std::end(us); + (void) std::begin(us); + (void) std::end(us); } diff --git a/libstdc++-v3/testsuite/23_containers/vector/range_access.cc b/libstdc++-v3/testsuite/23_containers/vector/range_access.cc index a36975cac72..0dd761b71f1 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/range_access.cc @@ -25,10 +25,10 @@ void test01() { std::vector v{1.0, 2.0, 3.0}; - std::begin(v); - std::end(v); + (void) std::begin(v); + (void) std::end(v); std::vector vb{true, false, true}; - std::begin(vb); - std::end(vb); + (void) std::begin(vb); + (void) std::end(vb); } diff --git a/libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc b/libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc index a43448581f3..40a084b918c 100644 --- a/libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc +++ b/libstdc++-v3/testsuite/24_iterators/customization_points/iter_move.cc @@ -51,7 +51,7 @@ constexpr bool test_X(int i, int j) { X x1{i}, x2{j}; - std::ranges::iter_move(&x1); // no-op + (void) std::ranges::iter_move(&x1); // no-op x1 = std::ranges::iter_move(&x2); return x1.value == j && x2.value == -1; } diff --git a/libstdc++-v3/testsuite/24_iterators/istream_iterator/sentinel.cc b/libstdc++-v3/testsuite/24_iterators/istream_iterator/sentinel.cc index 7e1fd173877..f8f16375bf0 100644 --- a/libstdc++-v3/testsuite/24_iterators/istream_iterator/sentinel.cc +++ b/libstdc++-v3/testsuite/24_iterators/istream_iterator/sentinel.cc @@ -43,9 +43,9 @@ test02() VERIFY( iter != std::default_sentinel ); VERIFY( std::default_sentinel != iter ); - *iter++; - *iter++; - *iter++; + (void) *iter++; + (void) *iter++; + (void) *iter++; VERIFY( iter == std::default_sentinel ); VERIFY( std::default_sentinel == iter ); } diff --git a/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/sentinel.cc b/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/sentinel.cc index 4961ddaf793..b7cdd44677d 100644 --- a/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/sentinel.cc +++ b/libstdc++-v3/testsuite/24_iterators/istreambuf_iterator/sentinel.cc @@ -41,7 +41,7 @@ test02() VERIFY( iter != std::default_sentinel ); VERIFY( std::default_sentinel != iter ); - std::next(iter, 3); + (void) std::next(iter, 3); VERIFY( iter == std::default_sentinel ); VERIFY( std::default_sentinel == iter ); } diff --git a/libstdc++-v3/testsuite/24_iterators/move_iterator/dr2061.cc b/libstdc++-v3/testsuite/24_iterators/move_iterator/dr2061.cc index 0af4b16b7f4..c9bd3d677e5 100644 --- a/libstdc++-v3/testsuite/24_iterators/move_iterator/dr2061.cc +++ b/libstdc++-v3/testsuite/24_iterators/move_iterator/dr2061.cc @@ -23,6 +23,6 @@ void test01() { int a[] = { 1, 2, 3, 4 }; - std::make_move_iterator(a + 4); - std::make_move_iterator(a); + (void) std::make_move_iterator(a + 4); + (void) std::make_move_iterator(a); } diff --git a/libstdc++-v3/testsuite/24_iterators/move_iterator/greedy_ops.cc b/libstdc++-v3/testsuite/24_iterators/move_iterator/greedy_ops.cc index 93b3d7dbcd4..ce50e34a5a6 100644 --- a/libstdc++-v3/testsuite/24_iterators/move_iterator/greedy_ops.cc +++ b/libstdc++-v3/testsuite/24_iterators/move_iterator/greedy_ops.cc @@ -1,4 +1,6 @@ // { dg-do compile { target c++11 } } +// { dg-options "-Wno-unused-result" } + // Copyright (C) 2010-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free diff --git a/libstdc++-v3/testsuite/24_iterators/normal_iterator/greedy_ops.cc b/libstdc++-v3/testsuite/24_iterators/normal_iterator/greedy_ops.cc index 557dfacbf24..29ff7266d07 100644 --- a/libstdc++-v3/testsuite/24_iterators/normal_iterator/greedy_ops.cc +++ b/libstdc++-v3/testsuite/24_iterators/normal_iterator/greedy_ops.cc @@ -1,4 +1,6 @@ // { dg-do compile } +// { dg-options "-Wno-unused-result" } + // Copyright (C) 2010-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -33,7 +35,7 @@ void test01() greedy_ops::C> iterator_type; iterator_type it(0); - + it == it; it != it; it < it; @@ -45,8 +47,8 @@ void test01() 1 + it; } -int main() -{ +int main() +{ test01(); return 0; } diff --git a/libstdc++-v3/testsuite/24_iterators/operations/prev_neg.cc b/libstdc++-v3/testsuite/24_iterators/operations/prev_neg.cc index 1d421bbcb2d..cafafc4b651 100644 --- a/libstdc++-v3/testsuite/24_iterators/operations/prev_neg.cc +++ b/libstdc++-v3/testsuite/24_iterators/operations/prev_neg.cc @@ -37,6 +37,6 @@ void test02() { const Y array[1] = { }; - std::prev(array + 1); + (void) std::prev(array + 1); // { dg-error "forward_iterator" "" { target *-*-* } 223 } } diff --git a/libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc b/libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc index 847f4352739..a962cd58236 100644 --- a/libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc +++ b/libstdc++-v3/testsuite/24_iterators/ostreambuf_iterator/2.cc @@ -45,7 +45,7 @@ void test02(void) VERIFY( !ostrb_it01.failed() ); ostrb_it01 = 'a'; VERIFY( !ostrb_it01.failed() ); - *ostrb_it01; + (void) *ostrb_it01; VERIFY( !ostrb_it01.failed() ); costreambuf_iter ostrb_it02(0); @@ -53,11 +53,11 @@ void test02(void) ostrb_it02++; ++ostrb_it02; VERIFY( ostrb_it02.failed() ); - *ostrb_it02; + (void) *ostrb_it02; VERIFY( ostrb_it02.failed() ); ostrb_it02 = 'a'; VERIFY( ostrb_it02.failed() ); - + // charT operator*() const // ostreambuf_iterator& operator++(); // ostreambuf_iterator& operator++(int); diff --git a/libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc b/libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc index b0b379c6ea5..e679f24e75b 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_access/range_access.cc @@ -25,8 +25,8 @@ void test01() { int arr[3] = {1, 2, 3}; - std::begin(arr); - std::end(arr); + (void) std::begin(arr); + (void) std::end(arr); static_assert( noexcept(std::begin(arr)), "LWG 2280" ); static_assert( noexcept(std::end(arr)), "LWG 2280" ); diff --git a/libstdc++-v3/testsuite/24_iterators/range_operations/100768.cc b/libstdc++-v3/testsuite/24_iterators/range_operations/100768.cc index bbcfcece5ff..d4deedd82f6 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_operations/100768.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_operations/100768.cc @@ -114,15 +114,15 @@ test01() // deleted overloads in namespace ns3 (because it is an associated namespace // and those functions are exact matches for the arguments). using namespace std::ranges; - advance(iter, 1); - advance(iter, 3, sentinel); - distance(iter, sentinel); - distance(range); - next(iter); - next(iter, -1); - next(iter, sentinel); - next(iter, 5, sentinel); - prev(iter); - prev(iter, 0); - prev(iter, 0, sentinel); + (void) advance(iter, 1); + (void) advance(iter, 3, sentinel); + (void) distance(iter, sentinel); + (void) distance(range); + (void) next(iter); + (void) next(iter, -1); + (void) next(iter, sentinel); + (void) next(iter, 5, sentinel); + (void) prev(iter); + (void) prev(iter, 0); + (void) prev(iter, 0, sentinel); } diff --git a/libstdc++-v3/testsuite/24_iterators/reverse_iterator/2.cc b/libstdc++-v3/testsuite/24_iterators/reverse_iterator/2.cc index 633c1426b96..bd8b20d877d 100644 --- a/libstdc++-v3/testsuite/24_iterators/reverse_iterator/2.cc +++ b/libstdc++-v3/testsuite/24_iterators/reverse_iterator/2.cc @@ -17,6 +17,8 @@ // with this library; see the file COPYING3. If not see // . +// { dg-options "-Wno-unused-result" } + // 24.4.1.2 Reverse iterators #include diff --git a/libstdc++-v3/testsuite/24_iterators/reverse_iterator/greedy_ops.cc b/libstdc++-v3/testsuite/24_iterators/reverse_iterator/greedy_ops.cc index 012f0082751..e5e6dd25027 100644 --- a/libstdc++-v3/testsuite/24_iterators/reverse_iterator/greedy_ops.cc +++ b/libstdc++-v3/testsuite/24_iterators/reverse_iterator/greedy_ops.cc @@ -1,4 +1,6 @@ // { dg-do compile } +// { dg-options "-Wno-unused-result" } + // Copyright (C) 2010-2021 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/range_access2.cc b/libstdc++-v3/testsuite/26_numerics/valarray/range_access2.cc index a7ce1332117..cf5418a61d1 100644 --- a/libstdc++-v3/testsuite/26_numerics/valarray/range_access2.cc +++ b/libstdc++-v3/testsuite/26_numerics/valarray/range_access2.cc @@ -27,9 +27,9 @@ void test01() { std::valarray va{1.0, 2.0, 3.0}; - std::cbegin(va); - std::cend(va); + (void) std::cbegin(va); + (void) std::cend(va); const auto& cva = va; - std::cbegin(cva); - std::cend(cva); + (void) std::cbegin(cva); + (void) std::cend(cva); } diff --git a/libstdc++-v3/testsuite/28_regex/range_access.cc b/libstdc++-v3/testsuite/28_regex/range_access.cc index 46ef3c64391..6baefbfb673 100644 --- a/libstdc++-v3/testsuite/28_regex/range_access.cc +++ b/libstdc++-v3/testsuite/28_regex/range_access.cc @@ -26,6 +26,6 @@ void test01() { std::smatch sm; - std::begin(sm); - std::end(sm); + (void) std::begin(sm); + (void) std::end(sm); } diff --git a/libstdc++-v3/testsuite/experimental/string_view/range_access/char/1.cc b/libstdc++-v3/testsuite/experimental/string_view/range_access/char/1.cc index c750430d6af..1c456920e5b 100644 --- a/libstdc++-v3/testsuite/experimental/string_view/range_access/char/1.cc +++ b/libstdc++-v3/testsuite/experimental/string_view/range_access/char/1.cc @@ -25,6 +25,6 @@ void test01() { std::experimental::string_view s("Hello, World!"); - std::begin(s); - std::end(s); + (void) std::begin(s); + (void) std::end(s); } diff --git a/libstdc++-v3/testsuite/experimental/string_view/range_access/wchar_t/1.cc b/libstdc++-v3/testsuite/experimental/string_view/range_access/wchar_t/1.cc index 1dd926333c3..f19e455a606 100644 --- a/libstdc++-v3/testsuite/experimental/string_view/range_access/wchar_t/1.cc +++ b/libstdc++-v3/testsuite/experimental/string_view/range_access/wchar_t/1.cc @@ -26,7 +26,7 @@ test01() { #ifdef _GLIBCXX_USE_WCHAR_T std::experimental::wstring_view ws(L"Hello, World!"); - std::begin(ws); - std::end(ws); + (void) std::begin(ws); + (void) std::end(ws); #endif } diff --git a/libstdc++-v3/testsuite/ext/vstring/range_access.cc b/libstdc++-v3/testsuite/ext/vstring/range_access.cc index 8219eeabed1..7b381ffd956 100644 --- a/libstdc++-v3/testsuite/ext/vstring/range_access.cc +++ b/libstdc++-v3/testsuite/ext/vstring/range_access.cc @@ -25,12 +25,12 @@ void test01() { __gnu_cxx::__vstring s("Hello, World!"); - std::begin(s); - std::end(s); + (void) std::begin(s); + (void) std::end(s); #ifdef _GLIBCXX_USE_WCHAR_T __gnu_cxx::__wvstring ws(L"Hello, World!"); - std::begin(ws); - std::end(ws); + (void) std::begin(ws); + (void) std::end(ws); #endif } diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/take.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/take.cc index 55f74824737..d79d451478d 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/take.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/take.cc @@ -62,7 +62,7 @@ test03() int x[] = {0,1,2,3,4,5}; auto is_odd = [] (int i) { return i%2 == 1; }; auto v = x | views::filter(is_odd) | views::take(3); - ranges::begin(v); + (void) ranges::begin(v); using R = decltype(v); static_assert(ranges::view); static_assert(!ranges::sized_range); diff --git a/libstdc++-v3/testsuite/std/ranges/p2259.cc b/libstdc++-v3/testsuite/std/ranges/p2259.cc index 0ec7e21f657..89234e246a0 100644 --- a/libstdc++-v3/testsuite/std/ranges/p2259.cc +++ b/libstdc++-v3/testsuite/std/ranges/p2259.cc @@ -64,7 +64,7 @@ test01() // Verify the changes to common_iterator. only_cxx20_input_range auto v6 = v0 | views::common; - *(v6.begin()++); + (void) *(v6.begin()++); // Verify the changes to iota_view. only_cxx20_input_range auto v8 = ranges::iota_view{v0.begin()}; @@ -77,7 +77,7 @@ test01() static_assert(std::contiguous_iterator); static_assert(std::same_as::iterator_category, std::random_access_iterator_tag>); - i10.operator->(); + (void) i10.operator->(); __iter_without_category auto i11 = std::counted_iterator{v0.begin(), 5}; }