diff --git a/AK/Concepts.h b/AK/Concepts.h index 3dda34c887f..7a6286385e4 100644 --- a/AK/Concepts.h +++ b/AK/Concepts.h @@ -45,6 +45,9 @@ concept OneOf = IsOneOf; template concept OneOfIgnoringCV = IsOneOfIgnoringCV; +template +concept OneOfIgnoringCVReference = IsOneOfIgnoringCVReference; + template typename S> concept SpecializationOf = IsSpecializationOf; @@ -185,6 +188,7 @@ using AK::Concepts::IteratorFunction; using AK::Concepts::IteratorPairWith; using AK::Concepts::OneOf; using AK::Concepts::OneOfIgnoringCV; +using AK::Concepts::OneOfIgnoringCVReference; using AK::Concepts::SameAs; using AK::Concepts::Signed; using AK::Concepts::SpecializationOf; diff --git a/AK/StdLibExtraDetails.h b/AK/StdLibExtraDetails.h index d3b5be83bec..a556eb11196 100644 --- a/AK/StdLibExtraDetails.h +++ b/AK/StdLibExtraDetails.h @@ -584,6 +584,12 @@ inline constexpr bool IsSameIgnoringCV = IsSame, RemoveCV>; template inline constexpr bool IsOneOfIgnoringCV = (IsSameIgnoringCV || ...); +template +inline constexpr bool IsSameIgnoringCVReference = IsSame, RemoveCVReference>; + +template +inline constexpr bool IsOneOfIgnoringCVReference = (IsSameIgnoringCVReference || ...); + template struct __InvokeResult { }; @@ -682,11 +688,13 @@ using AK::Detail::IsMoveConstructible; using AK::Detail::IsNullPointer; using AK::Detail::IsOneOf; using AK::Detail::IsOneOfIgnoringCV; +using AK::Detail::IsOneOfIgnoringCVReference; using AK::Detail::IsPOD; using AK::Detail::IsPointer; using AK::Detail::IsRvalueReference; using AK::Detail::IsSame; using AK::Detail::IsSameIgnoringCV; +using AK::Detail::IsSameIgnoringCVReference; using AK::Detail::IsSigned; using AK::Detail::IsSpecializationOf; using AK::Detail::IsTemplateBaseOf;