forked from OSchip/llvm-project
[temp.explicit]p1: constexpr cannot be specified in explicit instantiations.
llvm-svn: 141982
This commit is contained in:
parent
450128a68c
commit
465841e48c
|
@ -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)">;
|
||||
|
|
|
@ -6164,9 +6164,12 @@ DeclResult Sema::ActOnExplicitInstantiation(Scope *S,
|
|||
if (D.getDeclSpec().isInlineSpecified() && getLangOptions().CPlusPlus0x)
|
||||
Diag(D.getDeclSpec().getInlineSpecLoc(),
|
||||
diag::err_explicit_instantiation_inline)
|
||||
<<FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());
|
||||
|
||||
// FIXME: check for constexpr specifier.
|
||||
<< FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());
|
||||
if (D.getDeclSpec().isConstexprSpecified())
|
||||
// FIXME: Add a fix-it to remove the 'constexpr' and add a 'const' if one is
|
||||
// not already specified.
|
||||
Diag(D.getDeclSpec().getConstexprSpecLoc(),
|
||||
diag::err_explicit_instantiation_constexpr);
|
||||
|
||||
// C++0x [temp.explicit]p2:
|
||||
// There are two forms of explicit instantiation: an explicit instantiation
|
||||
|
|
|
@ -5,6 +5,11 @@ struct X {
|
|||
void f() {}
|
||||
};
|
||||
|
||||
template inline void X<int>::f(); // expected-error{{'inline'}}
|
||||
template inline void X<int>::f(); // expected-error{{explicit instantiation cannot be 'inline'}}
|
||||
|
||||
// FIXME: test constexpr
|
||||
template<typename T>
|
||||
struct Y {
|
||||
constexpr int f() { return 0; }
|
||||
};
|
||||
|
||||
template constexpr int Y<int>::f(); // expected-error{{explicit instantiation cannot be 'constexpr'}}
|
||||
|
|
Loading…
Reference in New Issue