[gcc(refs/users/ppalka/heads/libstdcxx-constrained-algos)] Cast the result of a predicate to bool before negating it

Patrick Palka ppalka@gcc.gnu.org
Tue Jan 28 19:12:00 GMT 2020


https://gcc.gnu.org/g:ddef9a5b3ce6214fe74c03f2135a4f5c0a6e0afd

commit ddef9a5b3ce6214fe74c03f2135a4f5c0a6e0afd
Author: Patrick Palka <ppalka@redhat.com>
Date:   Tue Jan 28 14:04:33 2020 -0500

    Cast the result of a predicate to bool before negating it

Diff:
---
 libstdc++-v3/include/bits/ranges_algo.h | 80 ++++++++++++++++-----------------
 1 file changed, 40 insertions(+), 40 deletions(-)

diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h
index 1d97dd1..8df5634 100644
--- a/libstdc++-v3/include/bits/ranges_algo.h
+++ b/libstdc++-v3/include/bits/ranges_algo.h
@@ -102,7 +102,7 @@ namespace ranges
     all_of(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {})
     {
       for (; __first != __last; ++__first)
-	if (!std::__invoke(__pred, std::__invoke(__proj, *__first)))
+	if (!(bool)std::__invoke(__pred, std::__invoke(__proj, *__first)))
 	  return false;
       return true;
     }
@@ -442,9 +442,9 @@ namespace ranges
 		return {__first1, ++__cur1};
 	      if (++__cur1 == __last1)
 		return {__cur1, __cur1};
-	      if (!std::__invoke(__pred,
-				 std::__invoke(__proj1, *__cur1),
-				 std::__invoke(__proj2, *__cur2)))
+	      if (!(bool)std::__invoke(__pred,
+				       std::__invoke(__proj1, *__cur1),
+				       std::__invoke(__proj2, *__cur2)))
 		{
 		  ++__first1;
 		  break;
@@ -695,9 +695,9 @@ namespace ranges
       // have the same elements in the same order.
       for (; __first1 != __last1 && __first2 != __last2;
 	   ++__first1, (void)++__first2)
-	if (!std::__invoke(__pred,
-			   std::__invoke(__proj1, *__first1),
-			   std::__invoke(__proj2, *__first2)))
+	if (!(bool)std::__invoke(__pred,
+				 std::__invoke(__proj1, *__first1),
+				 std::__invoke(__proj2, *__first2)))
 	    break;
 
       if constexpr (__sized_iters)
@@ -790,9 +790,9 @@ namespace ranges
 	  else
 	    {
 	      for (; __first1 != __last1; ++__first1, (void)++__first2)
-		if (!std::__invoke(__pred,
-				   std::__invoke(__proj1, *__first1),
-				   std::__invoke(__proj2, *__first2)))
+		if (!(bool)std::__invoke(__pred,
+					 std::__invoke(__proj1, *__first1),
+					 std::__invoke(__proj2, *__first2)))
 		  return false;
 	      return true;
 	    }
@@ -801,9 +801,9 @@ namespace ranges
 	{
 	  for (; __first1 != __last1 && __first2 != __last2;
 	       ++__first1, (void)++__first2)
-	    if (!std::__invoke(__pred,
-			       std::__invoke(__proj1, *__first1),
-			       std::__invoke(__proj2, *__first2)))
+	    if (!(bool)std::__invoke(__pred,
+				     std::__invoke(__proj1, *__first1),
+				     std::__invoke(__proj2, *__first2)))
 	      return false;
 	  return __first1 == __last1 && __first2 == __last2;
 	}
@@ -1552,7 +1552,7 @@ namespace ranges
       auto __result = __first;
       ++__first;
       for (; __first != __last; ++__first)
-	if (!std::__invoke(__pred, std::__invoke(__proj, *__first)))
+	if (!(bool)std::__invoke(__pred, std::__invoke(__proj, *__first)))
 	  {
 	    *__result = std::move(*__first);
 	    ++__result;
@@ -1610,7 +1610,7 @@ namespace ranges
 		   _Pred __pred, _Proj __proj = {})
     {
       for (; __first != __last; ++__first)
-	if (!std::__invoke(__pred, std::__invoke(__proj, *__first)))
+	if (!(bool)std::__invoke(__pred, std::__invoke(__proj, *__first)))
 	  {
 	    *__result = *__first;
 	    ++__result;
@@ -1683,9 +1683,9 @@ namespace ranges
       auto __dest = __first;
       ++__first;
       while (++__first != __last)
-	if (!std::__invoke(__comp,
-			   std::__invoke(__proj, *__dest),
-			   std::__invoke(__proj, *__first)))
+	if (!(bool)std::__invoke(__comp,
+				 std::__invoke(__proj, *__dest),
+				 std::__invoke(__proj, *__first)))
 	  *++__dest = std::move(*__first);
       return {++__dest, __first};
     }
@@ -1726,9 +1726,9 @@ namespace ranges
 	  auto __next = __first;
 	  *__result = *__next;
 	  while (++__next != __last)
-	    if (!std::__invoke(__comp,
-			       std::__invoke(__proj, *__first),
-			       std::__invoke(__proj, *__next)))
+	    if (!(bool)std::__invoke(__comp,
+				     std::__invoke(__proj, *__first),
+				     std::__invoke(__proj, *__next)))
 	      {
 		__first = __next;
 		*++__result = *__first;
@@ -1740,9 +1740,9 @@ namespace ranges
 	{
 	  *__result = *__first;
 	  while (++__first != __last)
-	    if (!std::__invoke(__comp,
-			       std::__invoke(__proj, *__result),
-			       std::__invoke(__proj, *__first)))
+	    if (!(bool)std::__invoke(__comp,
+				     std::__invoke(__proj, *__result),
+				     std::__invoke(__proj, *__first)))
 		*++__result = *__first;
 	  return {std::move(__first), std::move(++__result)};
 	}
@@ -1752,9 +1752,9 @@ namespace ranges
 	  *__result = __value;
 	  while (++__first != __last)
 	    {
-	      if (!std::__invoke(__comp,
-				 std::__invoke(__proj, *__first),
-				 std::__invoke(__proj, __value)))
+	      if (!(bool)std::__invoke(__comp,
+				       std::__invoke(__proj, *__first),
+				       std::__invoke(__proj, __value)))
 		{
 		  __value = *__first;
 		  *++__result = __value;
@@ -2581,7 +2581,7 @@ namespace ranges
       auto __i = ranges::lower_bound(__first, __last, __value, __comp, __proj);
       if (__i == __last)
 	return false;
-      return !std::__invoke(__comp, __value, std::__invoke(__proj, *__i));
+      return !(bool)std::__invoke(__comp, __value, std::__invoke(__proj, *__i));
     }
 
   template<forward_range _Range,
@@ -3307,9 +3307,9 @@ namespace ranges
 			    std::__invoke(__proj, __tmp),
 			    std::__invoke(__proj, __result.min)))
 	    __result.min = std::move(__tmp);
-	  if (!std::__invoke(__comp,
-			     std::__invoke(__proj, __tmp),
-			     std::__invoke(__proj, __result.max)))
+	  if (!(bool)std::__invoke(__comp,
+				   std::__invoke(__proj, __tmp),
+				   std::__invoke(__proj, __result.max)))
 	    __result.max = std::move(__tmp);
 	}
       return __result;
@@ -3411,9 +3411,9 @@ namespace ranges
 			    std::__invoke(__proj, *__i),
 			    std::__invoke(__proj, *__result.min)))
 	    __result.min = __i;
-	  if (!std::__invoke(__comp,
-			     std::__invoke(__proj, *__i),
-			     std::__invoke(__proj, *__result.max)))
+	  if (!(bool)std::__invoke(__comp,
+				   std::__invoke(__proj, *__i),
+				   std::__invoke(__proj, *__result.max)))
 	    __result.max = __i;
 	}
       return __result;
@@ -3570,9 +3570,9 @@ namespace ranges
 			    std::__invoke(__proj, *__ii)))
 	    {
 	      auto __j = __lasti;
-	      while (!std::__invoke(__comp,
-				    std::__invoke(__proj, *__i),
-				    std::__invoke(__proj, *--__j)))
+	      while (!(bool)std::__invoke(__comp,
+					  std::__invoke(__proj, *__i),
+					  std::__invoke(__proj, *--__j)))
 		;
 	      ranges::iter_swap(__i, __j);
 	      ranges::reverse(__ii, __last);
@@ -3627,9 +3627,9 @@ namespace ranges
 			    std::__invoke(__proj, *__i)))
 	    {
 	      auto __j = __lasti;
-	      while (!std::__invoke(__comp,
-				    std::__invoke(__proj, *--__j),
-				    std::__invoke(__proj, *__i)))
+	      while (!(bool)std::__invoke(__comp,
+					  std::__invoke(__proj, *--__j),
+					  std::__invoke(__proj, *__i)))
 		;
 	      ranges::iter_swap(__i, __j);
 	      ranges::reverse(__ii, __last);



More information about the Libstdc++-cvs mailing list