Compare commits

...

2 Commits

Author SHA1 Message Date
Javier Martinez
cc55c10911
Merge d766c527c7 into ec52a74967 2025-06-07 17:53:01 -05:00
Javier Martinez
d766c527c7 Common: Replace Contains and ContainsSubrange with C++23 std::ranges equivalents
Common: Use feature macros for better compatibility

Common/Contains.h: fix linting issue

Common/Contains.h: Add C++23 TODO

Common/Contains.h: Fix comment lint issue.
2025-06-05 19:18:08 -04:00

View File

@ -5,9 +5,19 @@
#include <algorithm> #include <algorithm>
#include <iterator> #include <iterator>
#include <version>
namespace Common namespace Common
{ {
#if defined(__cpp_lib_ranges_contains) && __cpp_lib_ranges_contains >= 202202L
// Use the standard library functions if available (C++23)
inline constexpr auto& Contains = std::ranges::contains;
inline constexpr auto& ContainsSubrange = std::ranges::contains_subrange;
#else
// TODO C++23: This old implementation likely isn't needed once migrated to C++23. Remove them or
// this file itself. Ad hoc implementations for C++20
struct ContainsFn struct ContainsFn
{ {
template <std::input_iterator I, std::sentinel_for<I> S, class T, class Proj = std::identity> template <std::input_iterator I, std::sentinel_for<I> S, class T, class Proj = std::identity>
@ -54,8 +64,8 @@ struct ContainsSubrangeFn
} }
}; };
// TODO C++23: Replace with std::ranges::contains.
inline constexpr ContainsFn Contains{}; inline constexpr ContainsFn Contains{};
// TODO C++23: Replace with std::ranges::contains_subrange.
inline constexpr ContainsSubrangeFn ContainsSubrange{}; inline constexpr ContainsSubrangeFn ContainsSubrange{};
#endif
} // namespace Common } // namespace Common