Commit c9e3b209 by Paolo Carlini Committed by Paolo Carlini

PR c++/50080 (again)

/cp
2012-10-15  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/50080 (again)
	* parser.c (cp_parser_optional_template_keyword): When -pedantic
	and C++98 mode restore pre-Core/468 behavior.

/testsuite
2012-10-15  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/50080 (again)
	* g++.dg/parse/tmpl-outside2.C: Tweak, error in C++98.
	* g++.dg/parse/tmpl-outside1.C: Likewise.
	* g++.dg/template/qualttp18.C: Likewise.
	* g++.old-deja/g++.pt/memtemp87.C: Likewise.
	* g++.old-deja/g++.pt/overload13.C: Likewise.

From-SVN: r192470
parent e3044010
2012-10-15 Paolo Carlini <paolo.carlini@oracle.com> 2012-10-15 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/50080 (again)
* parser.c (cp_parser_optional_template_keyword): When -pedantic
and C++98 mode restore pre-Core/468 behavior.
2012-10-15 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/50080 PR c++/50080
* parser.c (cp_parser_optional_template_keyword): Implement * parser.c (cp_parser_optional_template_keyword): Implement
Core/468, allow outside template. Core/468, allow outside template.
......
...@@ -23252,9 +23252,29 @@ cp_parser_optional_template_keyword (cp_parser *parser) ...@@ -23252,9 +23252,29 @@ cp_parser_optional_template_keyword (cp_parser *parser)
{ {
if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE)) if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
{ {
/* Consume the `template' keyword. */ /* In C++98 the `template' keyword can only be used within templates;
cp_lexer_consume_token (parser->lexer); outside templates the parser can always figure out what is a
return true; template and what is not. In C++11, per the resolution of DR 468,
`template' is allowed in cases where it is not strictly necessary. */
if (!processing_template_decl
&& pedantic && cxx_dialect == cxx98)
{
cp_token *token = cp_lexer_peek_token (parser->lexer);
pedwarn (token->location, OPT_Wpedantic,
"in C++98 %<template%> (as a disambiguator) is only "
"allowed within templates");
/* If this part of the token stream is rescanned, the same
error message would be generated. So, we purge the token
from the stream. */
cp_lexer_purge_token (parser->lexer);
return false;
}
else
{
/* Consume the `template' keyword. */
cp_lexer_consume_token (parser->lexer);
return true;
}
} }
return false; return false;
} }
......
2012-10-15 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/50080 (again)
* g++.dg/parse/tmpl-outside2.C: Tweak, error in C++98.
* g++.dg/parse/tmpl-outside1.C: Likewise.
* g++.dg/template/qualttp18.C: Likewise.
* g++.old-deja/g++.pt/memtemp87.C: Likewise.
* g++.old-deja/g++.pt/overload13.C: Likewise.
2012-10-15 Uros Bizjak <ubizjak@gmail.com> 2012-10-15 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/avx256-unaligned-load-1.c: Update asm scan patterns. * gcc.target/i386/avx256-unaligned-load-1.c: Update asm scan patterns.
......
...@@ -7,4 +7,4 @@ struct X ...@@ -7,4 +7,4 @@ struct X
template <int i> struct Y {}; template <int i> struct Y {};
}; };
typedef X::template Y<0> y; typedef X::template Y<0> y; // { dg-error "template|invalid" "" { target c++98 } }
...@@ -15,5 +15,5 @@ void test() ...@@ -15,5 +15,5 @@ void test()
int main() int main()
{ {
typename A<double>::template B<int> b; typename A<double>::template B<int> b; // { dg-error "template|expected" "" { target c++98 } }
} }
...@@ -14,7 +14,7 @@ template <template <class> class TT> struct X ...@@ -14,7 +14,7 @@ template <template <class> class TT> struct X
struct C struct C
{ {
X<A::template B> x; X<A::template B> x; // { dg-error "template" "" { target c++98 } }
}; };
int main() int main()
......
...@@ -12,4 +12,4 @@ public: ...@@ -12,4 +12,4 @@ public:
template<template<class> class> template<template<class> class>
class Y { class Y {
}; };
Q::template X<int> x; Q::template X<int> x; // { dg-error "template" "" { target c++98 } }
...@@ -7,5 +7,5 @@ struct A { ...@@ -7,5 +7,5 @@ struct A {
int main () int main ()
{ {
A a; A a;
return a.template f (0); return a.template f (0); // { dg-error "template" "" { target c++98 } }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment