From: Jonathan Wakely <jwakely@redhat.com>
To: Tim Song <t.canens.cpp@gmail.com>
Cc: gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org, ppalka@redhat.com
Subject: Re: [committed] libstdc++: P1964R2 Wording for boolean-testable
Date: Wed, 19 Feb 2020 10:57:00 -0000 [thread overview]
Message-ID: <20200219105716.GL9441@redhat.com> (raw)
In-Reply-To: <20200218134905.GA9441@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 715 bytes --]
On 18/02/20 13:49 +0000, Jonathan Wakely wrote:
>On 17/02/20 22:27 +0100, Tim Song wrote:
>>On Mon, Feb 17, 2020 at 12:34 PM Jonathan Wakely <jwakely@redhat.com> wrote:
>>
>>>This removes the complicated std::boolean concept, as agreed in Prague.
>>>
>>> * include/bits/ranges_algo.h (__find_fn, __find_first_of_fn)
>>> (__adjacent_find_fn): Cast result of predicate to bool.
>>
>>
>>
>>Um, why? These look fine without the cast. (The WP was doing == false,
>>which is a different matter.)
>
>Good point, I'll undo those bits. Thanks.
Looks like we have a few other casts to bool that are redundant
post-p1946r2, not just the ones I added.
This removes them, testing it now.
[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 4042 bytes --]
commit a51a8daabd0ae08e2ee33bbc3c5a52cb20ac0eef
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Wed Feb 19 10:40:24 2020 +0000
libstdc++: Remove redundant bool casts in ranges algorithms
Some of these casts were added by me the other day, but some were
already present. I think they are all redundant following the
introduction of the boolean-testable concept in P1964R2.
* include/bits/ranges_algo.h (__find_fn, __find_first_of_fn)
(__adjacent_find_fn, __remove_if_fn, __remove_copy_if_fn)
(__unique_fn, __unique_copy_fn): Remove redundant conversions to bool.
diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h
index 31b1bf0d448..a69181e12cb 100644
--- a/libstdc++-v3/include/bits/ranges_algo.h
+++ b/libstdc++-v3/include/bits/ranges_algo.h
@@ -244,7 +244,7 @@ namespace ranges
const _Tp& __value, _Proj __proj = {}) const
{
while (__first != __last
- && !(bool)(std::__invoke(__proj, *__first) == __value))
+ && !(std::__invoke(__proj, *__first) == __value))
++__first;
return __first;
}
@@ -333,9 +333,9 @@ namespace ranges
{
for (; __first1 != __last1; ++__first1)
for (auto __iter = __first2; __iter != __last2; ++__iter)
- if ((bool)std::__invoke(__pred,
- std::__invoke(__proj1, *__first1),
- std::__invoke(__proj2, *__iter)))
+ if (std::__invoke(__pred,
+ std::__invoke(__proj1, *__first1),
+ std::__invoke(__proj2, *__iter)))
return __first1;
return __first1;
}
@@ -730,9 +730,9 @@ namespace ranges
auto __next = __first;
for (; ++__next != __last; __first = __next)
{
- if ((bool)std::__invoke(__pred,
- std::__invoke(__proj, *__first),
- std::__invoke(__proj, *__next)))
+ if (std::__invoke(__pred,
+ std::__invoke(__proj, *__first),
+ std::__invoke(__proj, *__next)))
return __first;
}
return __next;
@@ -1219,7 +1219,7 @@ namespace ranges
auto __result = __first;
++__first;
for (; __first != __last; ++__first)
- if (!(bool)std::__invoke(__pred, std::__invoke(__proj, *__first)))
+ if (!std::__invoke(__pred, std::__invoke(__proj, *__first)))
{
*__result = std::move(*__first);
++__result;
@@ -1289,7 +1289,7 @@ namespace ranges
_Pred __pred, _Proj __proj = {}) const
{
for (; __first != __last; ++__first)
- if (!(bool)std::__invoke(__pred, std::__invoke(__proj, *__first)))
+ if (!std::__invoke(__pred, std::__invoke(__proj, *__first)))
{
*__result = *__first;
++__result;
@@ -1372,9 +1372,9 @@ namespace ranges
auto __dest = __first;
++__first;
while (++__first != __last)
- if (!(bool)std::__invoke(__comp,
- std::__invoke(__proj, *__dest),
- std::__invoke(__proj, *__first)))
+ if (!std::__invoke(__comp,
+ std::__invoke(__proj, *__dest),
+ std::__invoke(__proj, *__first)))
*++__dest = std::move(*__first);
return {++__dest, __first};
}
@@ -1420,9 +1420,9 @@ namespace ranges
auto __next = __first;
*__result = *__next;
while (++__next != __last)
- if (!(bool)std::__invoke(__comp,
- std::__invoke(__proj, *__first),
- std::__invoke(__proj, *__next)))
+ if (!std::__invoke(__comp,
+ std::__invoke(__proj, *__first),
+ std::__invoke(__proj, *__next)))
{
__first = __next;
*++__result = *__first;
@@ -1434,9 +1434,9 @@ namespace ranges
{
*__result = *__first;
while (++__first != __last)
- if (!(bool)std::__invoke(__comp,
- std::__invoke(__proj, *__result),
- std::__invoke(__proj, *__first)))
+ if (!std::__invoke(__comp,
+ std::__invoke(__proj, *__result),
+ std::__invoke(__proj, *__first)))
*++__result = *__first;
return {std::move(__first), std::move(++__result)};
}
prev parent reply other threads:[~2020-02-19 10:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-17 18:34 Jonathan Wakely
2020-02-17 21:27 ` Tim Song
2020-02-18 13:49 ` Jonathan Wakely
2020-02-19 10:57 ` Jonathan Wakely [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200219105716.GL9441@redhat.com \
--to=jwakely@redhat.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=libstdc++@gcc.gnu.org \
--cc=ppalka@redhat.com \
--cc=t.canens.cpp@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).