AK: Add IsOneOfIgnoringCVReference to StdLibExtraDetails.h

Much like `IsOneOfIgnoringCV`, some functions want to ignore both
cv-qualifiers _and_ references. Add a template and concept for it.
This commit is contained in:
Jonne Ransijn 2025-04-22 21:38:42 +02:00 committed by Andrew Kaster
commit 063be28e90
Notes: github-actions[bot] 2025-04-23 03:21:41 +00:00
2 changed files with 12 additions and 0 deletions

View file

@ -45,6 +45,9 @@ concept OneOf = IsOneOf<U, Ts...>;
template<typename U, typename... Ts>
concept OneOfIgnoringCV = IsOneOfIgnoringCV<U, Ts...>;
template<typename U, typename... Ts>
concept OneOfIgnoringCVReference = IsOneOfIgnoringCVReference<U, Ts...>;
template<typename T, template<typename...> typename S>
concept SpecializationOf = IsSpecializationOf<T, S>;
@ -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;

View file

@ -584,6 +584,12 @@ inline constexpr bool IsSameIgnoringCV = IsSame<RemoveCV<T>, RemoveCV<U>>;
template<typename T, typename... Ts>
inline constexpr bool IsOneOfIgnoringCV = (IsSameIgnoringCV<T, Ts> || ...);
template<typename T, typename U>
inline constexpr bool IsSameIgnoringCVReference = IsSame<RemoveCVReference<T>, RemoveCVReference<U>>;
template<typename T, typename... Ts>
inline constexpr bool IsOneOfIgnoringCVReference = (IsSameIgnoringCVReference<T, Ts> || ...);
template<typename...>
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;