diff --git a/AK/Concepts.h b/AK/Concepts.h index ced4b29142..697a8f1ec0 100644 --- a/AK/Concepts.h +++ b/AK/Concepts.h @@ -51,6 +51,21 @@ concept IteratorFunction = requires(Func func, Args... args) } -> SameAs; }; + +template +concept IteratorPairWith = requires(T it, EndT end) +{ + *it; + { it != end } -> SameAs; + ++it; +}; + +template +concept IterableContainer = requires +{ + { declval().begin() } -> IteratorPairWith().end())>; +}; + // clang-format on } @@ -58,7 +73,9 @@ using AK::Concepts::Arithmetic; using AK::Concepts::Enum; using AK::Concepts::FloatingPoint; using AK::Concepts::Integral; +using AK::Concepts::IterableContainer; using AK::Concepts::IteratorFunction; +using AK::Concepts::IteratorPairWith; using AK::Concepts::Signed; using AK::Concepts::Unsigned; using AK::Concepts::VoidFunction;