From 2b79f36148f7582b2788cea326849ba5dc119dfe Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Sun, 17 Apr 2022 09:21:55 +0430 Subject: [PATCH] AK: Add a OneOfIgnoringCV concept Some functions want to ignore cv-qualifiers, and it's much easier to constrain the type through a concept than a separate requires clause on the function. --- AK/Concepts.h | 4 ++++ AK/StdLibExtraDetails.h | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/AK/Concepts.h b/AK/Concepts.h index 4cc01a7eb83..7186d6c2ef8 100644 --- a/AK/Concepts.h +++ b/AK/Concepts.h @@ -39,6 +39,9 @@ concept SameAs = IsSame; template concept OneOf = IsOneOf; +template +concept OneOfIgnoringCV = IsOneOfIgnoringCV; + template typename S> concept SpecializationOf = IsSpecializationOf; @@ -121,6 +124,7 @@ using AK::Concepts::IterableContainer; using AK::Concepts::IteratorFunction; using AK::Concepts::IteratorPairWith; using AK::Concepts::OneOf; +using AK::Concepts::OneOfIgnoringCV; using AK::Concepts::SameAs; using AK::Concepts::Signed; using AK::Concepts::SpecializationOf; diff --git a/AK/StdLibExtraDetails.h b/AK/StdLibExtraDetails.h index 5d0006a2056..8bd643436a1 100644 --- a/AK/StdLibExtraDetails.h +++ b/AK/StdLibExtraDetails.h @@ -593,6 +593,12 @@ inline constexpr bool IsHashCompatible = true; template inline constexpr bool IsOneOf = (IsSame || ...); +template +inline constexpr bool IsSameIgnoringCV = IsSame, RemoveCV>; + +template +inline constexpr bool IsOneOfIgnoringCV = (IsSameIgnoringCV || ...); + } using AK::Detail::AddConst; using AK::Detail::AddConstToReferencedType; @@ -630,10 +636,12 @@ using AK::Detail::IsMoveAssignable; using AK::Detail::IsMoveConstructible; using AK::Detail::IsNullPointer; using AK::Detail::IsOneOf; +using AK::Detail::IsOneOfIgnoringCV; using AK::Detail::IsPOD; using AK::Detail::IsPointer; using AK::Detail::IsRvalueReference; using AK::Detail::IsSame; +using AK::Detail::IsSameIgnoringCV; using AK::Detail::IsSigned; using AK::Detail::IsSpecializationOf; using AK::Detail::IsTrivial;