forked from OSchip/llvm-project
parent
815b70efcd
commit
f986ba7528
|
@ -256,6 +256,9 @@ def err_typename_refers_to_non_type_template : Error<
|
|||
def err_expected_type_name_after_typename : Error<
|
||||
"expected an identifier or template-id after '::'">;
|
||||
|
||||
def err_variadic_templates : Error<
|
||||
"variadic templates are only allowed in C++0x">;
|
||||
|
||||
// Language specific pragmas
|
||||
// - Generic warnings
|
||||
def warn_pragma_expected_lparen : Warning<
|
||||
|
|
|
@ -290,11 +290,11 @@ Parser::ParseTemplateParameterList(unsigned Depth,
|
|||
/// parameter-declaration
|
||||
///
|
||||
/// type-parameter: (see below)
|
||||
/// 'class' ...[opt] identifier[opt]
|
||||
/// 'class' ...[opt][C++0x] identifier[opt]
|
||||
/// 'class' identifier[opt] '=' type-id
|
||||
/// 'typename' ...[opt] identifier[opt]
|
||||
/// 'typename' ...[opt][C++0x] identifier[opt]
|
||||
/// 'typename' identifier[opt] '=' type-id
|
||||
/// 'template' ...[opt] '<' template-parameter-list '>' 'class' identifier[opt]
|
||||
/// 'template' ...[opt][C++0x] '<' template-parameter-list '>' 'class' identifier[opt]
|
||||
/// 'template' '<' template-parameter-list '>' 'class' identifier[opt] = id-expression
|
||||
Parser::DeclPtrTy
|
||||
Parser::ParseTemplateParameter(unsigned Depth, unsigned Position) {
|
||||
|
@ -319,9 +319,9 @@ Parser::ParseTemplateParameter(unsigned Depth, unsigned Position) {
|
|||
/// ParseTemplateTemplateParameter and ParseNonTypeTemplateParameter.
|
||||
///
|
||||
/// type-parameter: [C++ temp.param]
|
||||
/// 'class' ...[opt] identifier[opt]
|
||||
/// 'class' ...[opt][C++0x] identifier[opt]
|
||||
/// 'class' identifier[opt] '=' type-id
|
||||
/// 'typename' ...[opt] identifier[opt]
|
||||
/// 'typename' ...[opt][C++0x] identifier[opt]
|
||||
/// 'typename' identifier[opt] '=' type-id
|
||||
Parser::DeclPtrTy Parser::ParseTypeParameter(unsigned Depth, unsigned Position){
|
||||
assert((Tok.is(tok::kw_class) || Tok.is(tok::kw_typename)) &&
|
||||
|
@ -334,9 +334,12 @@ Parser::DeclPtrTy Parser::ParseTypeParameter(unsigned Depth, unsigned Position){
|
|||
// Grab the ellipsis (if given).
|
||||
bool Ellipsis = false;
|
||||
SourceLocation EllipsisLoc;
|
||||
if (getLang().CPlusPlus0x && Tok.is(tok::ellipsis)) {
|
||||
if (Tok.is(tok::ellipsis)) {
|
||||
Ellipsis = true;
|
||||
EllipsisLoc = ConsumeToken();
|
||||
|
||||
if (!getLang().CPlusPlus0x)
|
||||
Diag(EllipsisLoc, diag::err_variadic_templates);
|
||||
}
|
||||
|
||||
// Grab the template parameter name (if given)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
// RUN: clang-cc -fsyntax-only -verify %s
|
||||
|
||||
// Type parameter packs.
|
||||
template <typename ... > struct T1 {}; // expected-error{{variadic templates are only allowed in C++0x}}
|
||||
|
Loading…
Reference in New Issue