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;