================
@@ -12163,6 +12163,23 @@ bool Sema::CheckFunctionDeclaration(Scope *S, 
FunctionDecl *NewFD,
     }
   }
 
+  // C++11 [dcl.constexpr]p1: An explicit specialization of a constexpr
+  // function can differ from the template declaration with respect to
+  // the constexpr specifier.
+  if (IsMemberSpecialization) {
+    FunctionDecl *InstantiationFunction =
+        OldDecl ? OldDecl->getAsFunction() : nullptr;
+    if (InstantiationFunction &&
+        InstantiationFunction->getTemplateSpecializationKind() ==
+            TSK_ImplicitInstantiation &&
----------------
erichkeane wrote:

That is what I'm wondering, I think from reading the standard that the ONLY 
thing that matters is that the current one is an explicit specialization.  The 
kind of the 'old' thing we found is irrelevant.  It should always end up being 
a primary template (but even if it isn't, it shouldn't matter?).  And even the 
existence of it doesn't matter, so long as we know we are an explicit 
specialization.

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

Reply via email to