[libcxx-commits] [libcxx] be86221 - [libc++] Implement any_of in terms of find_if (#207274)

via libcxx-commits libcxx-commits at lists.llvm.org
Thu Jul 23 06:38:26 PDT 2026


Author: Louis Dionne
Date: 2026-07-23T09:38:21-04:00
New Revision: be86221af36d62be2e25a8b6e89ae8199d9dce0a

URL: https://github.com/llvm/llvm-project/commit/be86221af36d62be2e25a8b6e89ae8199d9dce0a
DIFF: https://github.com/llvm/llvm-project/commit/be86221af36d62be2e25a8b6e89ae8199d9dce0a.diff

LOG: [libc++] Implement any_of in terms of find_if (#207274)

This way, any optimizations in find_if will be picked up by any_of.

Closes #129310

Added: 
    

Modified: 
    libcxx/include/__algorithm/any_of.h

Removed: 
    


################################################################################
diff  --git a/libcxx/include/__algorithm/any_of.h b/libcxx/include/__algorithm/any_of.h
index 4b6eb94517286..119979d749077 100644
--- a/libcxx/include/__algorithm/any_of.h
+++ b/libcxx/include/__algorithm/any_of.h
@@ -10,33 +10,35 @@
 #ifndef _LIBCPP___ALGORITHM_ANY_OF_H
 #define _LIBCPP___ALGORITHM_ANY_OF_H
 
+#include <__algorithm/find_if.h>
 #include <__config>
 #include <__functional/identity.h>
-#include <__type_traits/invoke.h>
+#include <__utility/move.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _Iter, class _Sent, class _Proj, class _Pred>
 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool
 __any_of(_Iter __first, _Sent __last, _Pred& __pred, _Proj& __proj) {
-  for (; __first != __last; ++__first) {
-    if (std::__invoke(__pred, std::__invoke(__proj, *__first)))
-      return true;
-  }
-  return false;
+  return std::__find_if(std::move(__first), __last, __pred, __proj) != __last;
 }
 
 template <class _InputIterator, class _Predicate>
 [[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool
 any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) {
   __identity __proj;
-  return std::__any_of(__first, __last, __pred, __proj);
+  return std::__any_of(std::move(__first), std::move(__last), __pred, __proj);
 }
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_ANY_OF_H


        


More information about the libcxx-commits mailing list