浏览代码

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

Ali Mohammad Pur 4 年之前
父节点
当前提交
c6a137dbac
共有 1 个文件被更改,包括 8 次插入0 次删除
  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>
 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::AddLvalueReference;
@@ -570,6 +577,7 @@ using AK::Detail::IsPointer;
 using AK::Detail::IsRvalueReference;
 using AK::Detail::IsSame;
 using AK::Detail::IsSigned;
+using AK::Detail::IsSpecializationOf;
 using AK::Detail::IsTrivial;
 using AK::Detail::IsTriviallyAssignable;
 using AK::Detail::IsTriviallyConstructible;