================ @@ -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