================
@@ -3134,6 +3134,31 @@ bool Type::isStdByteType() const {
   return false;
 }
 
+bool Type::isDestroyingDeleteT() const {
+  auto *RD = getAsCXXRecordDecl();
+  return RD && RD->isInStdNamespace() && RD->getIdentifier() &&
+         RD->getIdentifier()->isStr("destroying_delete_t");
+}
+
+TemplateDecl *Type::getSpecializedTemplateDecl() const {
+  auto UnderlyingType = getCanonicalTypeInternal();
+  if (auto *TST = UnderlyingType->getAs<TemplateSpecializationType>())
+    return TST->getTemplateName().getAsTemplateDecl();
+  if (auto *RT = UnderlyingType->getAsCXXRecordDecl()) {
+    if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(RT))
+      return CTSD->getSpecializedTemplate();
+  }
+  return nullptr;
+}
+
+bool Type::isTypeIdentitySpecialization() const {
+  const TemplateDecl *STDecl = getSpecializedTemplateDecl();
+  if (!STDecl)
+    return false;
+  IdentifierInfo *II = STDecl->getIdentifier();
+  return STDecl->isInStdNamespace() && II->isStr("type_identity");
+}
+
----------------
cor3ntin wrote:

- This should be modeled on `Sema::isStdInitializerList` (ie moved to sema, 
maybe result cached)
- isStr should be replaced by comparison to ` 
&PP.getIdentifierTable().get("name")`  (people do terrible things with the 
preprocessor)

`getSpecializedTemplateDecl()` seems like a reasonable thing to have in Type 
though. @AaronBallman 


https://github.com/llvm/llvm-project/pull/113510
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to