Kaynağa Gözat

AK: Add a IsSpecializationOf<T, Template> type trait

Ali Mohammad Pur 4 yıl önce
ebeveyn
işleme
c6a137dbac
1 değiştirilmiş dosya ile 8 ekleme ve 0 silme
  1. 8 0
      AK/StdLibExtraDetails.h

+ 8 - 0
AK/StdLibExtraDetails.h

@@ -532,6 +532,13 @@ inline constexpr bool IsMoveAssignable = IsAssignable<AddLvalueReference<T>, Add
 
 
 template<typename T>
 template<typename T>
 inline constexpr bool IsTriviallyMoveAssignable = IsTriviallyAssignable<AddLvalueReference<T>, AddRvalueReference<T>>;
 inline constexpr bool IsTriviallyMoveAssignable = IsTriviallyAssignable<AddLvalueReference<T>, AddRvalueReference<T>>;
+
+template<typename T, template<typename...> typename U>
+inline constexpr bool IsSpecializationOf = false;
+
+template<template<typename...> typename U, typename... Us>
+inline constexpr bool IsSpecializationOf<U<Us...>, U> = true;
+
 }
 }
 using AK::Detail::AddConst;
 using AK::Detail::AddConst;
 using AK::Detail::AddLvalueReference;
 using AK::Detail::AddLvalueReference;
@@ -570,6 +577,7 @@ using AK::Detail::IsPointer;
 using AK::Detail::IsRvalueReference;
 using AK::Detail::IsRvalueReference;
 using AK::Detail::IsSame;
 using AK::Detail::IsSame;
 using AK::Detail::IsSigned;
 using AK::Detail::IsSigned;
+using AK::Detail::IsSpecializationOf;
 using AK::Detail::IsTrivial;
 using AK::Detail::IsTrivial;
 using AK::Detail::IsTriviallyAssignable;
 using AK::Detail::IsTriviallyAssignable;
 using AK::Detail::IsTriviallyConstructible;
 using AK::Detail::IsTriviallyConstructible;