From: Richard Smith Date: Fri, 14 Oct 2011 19:58:02 +0000 (+0000) Subject: [temp.explicit]p1: constexpr cannot be specified in explicit instantiations. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fe6f64846b8714b2951d9ea80fc40a3e020f3920;p=clang [temp.explicit]p1: constexpr cannot be specified in explicit instantiations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141982 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index a3a423d9d7..4051a80638 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -2412,6 +2412,8 @@ def note_explicit_instantiation_candidate : Note< "explicit instantiation candidate function template here %0">; def err_explicit_instantiation_inline : Error< "explicit instantiation cannot be 'inline'">; +def err_explicit_instantiation_constexpr : Error< + "explicit instantiation cannot be 'constexpr'">; def ext_explicit_instantiation_without_qualified_id : Extension< "qualifier in explicit instantiation of %q0 requires a template-id " "(a typedef is not permitted)">; diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index 929d74efa9..8dda34c8ab 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -6164,9 +6164,12 @@ DeclResult Sema::ActOnExplicitInstantiation(Scope *S, if (D.getDeclSpec().isInlineSpecified() && getLangOptions().CPlusPlus0x) Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_explicit_instantiation_inline) - <::f(); // expected-error{{'inline'}} +template inline void X::f(); // expected-error{{explicit instantiation cannot be 'inline'}} -// FIXME: test constexpr +template +struct Y { + constexpr int f() { return 0; } +}; + +template constexpr int Y::f(); // expected-error{{explicit instantiation cannot be 'constexpr'}}