diff --git a/AK/Concepts.h b/AK/Concepts.h index 7719e045d2..4cc01a7eb8 100644 --- a/AK/Concepts.h +++ b/AK/Concepts.h @@ -36,6 +36,9 @@ concept Enum = IsEnum; template concept SameAs = IsSame; +template +concept OneOf = IsOneOf; + template typename S> concept SpecializationOf = IsSpecializationOf; @@ -117,6 +120,7 @@ using AK::Concepts::Integral; using AK::Concepts::IterableContainer; using AK::Concepts::IteratorFunction; using AK::Concepts::IteratorPairWith; +using AK::Concepts::OneOf; using AK::Concepts::SameAs; using AK::Concepts::Signed; using AK::Concepts::SpecializationOf; diff --git a/AK/StdLibExtraDetails.h b/AK/StdLibExtraDetails.h index 3357363ea2..1b6bc6b944 100644 --- a/AK/StdLibExtraDetails.h +++ b/AK/StdLibExtraDetails.h @@ -572,6 +572,9 @@ inline constexpr bool IsHashCompatible = false; template inline constexpr bool IsHashCompatible = true; +template +inline constexpr bool IsOneOf = (IsSame || ...); + } using AK::Detail::AddConst; using AK::Detail::AddLvalueReference; @@ -607,6 +610,7 @@ using AK::Detail::IsLvalueReference; using AK::Detail::IsMoveAssignable; using AK::Detail::IsMoveConstructible; using AK::Detail::IsNullPointer; +using AK::Detail::IsOneOf; using AK::Detail::IsPOD; using AK::Detail::IsPointer; using AK::Detail::IsRvalueReference;