diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6ce6f5fd1f78704b803530ca26e6f411363fdc84..cd19181dafc02c1d4bff6df2b8f60cb66b39160d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2005-09-12 Mark Mitchell <mark@codesourcery.com> + + PR c++/23841 + * parser.c (cp_parser_primary_expression): Recognize the closing + ">" of a template-argument-list after a floating-point literal as + the end of a cast expression. + 2005-09-12 Mark Mitchell <mark@codesourcery.com> PR c++/23789 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index a8a2c4963e7b6ecab8676343bc69003aedb609f4..0f8d17cd5040beaee6c34e259866ba21a806d187 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -2779,7 +2779,10 @@ cp_parser_primary_expression (cp_parser *parser, /* The end of the cast-expression. */ && next_token->type != CPP_CLOSE_PAREN /* The end of an array bound. */ - && next_token->type != CPP_CLOSE_SQUARE) + && next_token->type != CPP_CLOSE_SQUARE + /* The closing ">" in a template-argument-list. */ + && (next_token->type != CPP_GREATER + || parser->greater_than_is_operator_p)) cast_p = false; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9678760d8a659c5ff1575eb48f05d345361f157f..26919da7139c3353500f51f6527efb074fcce5b4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-09-12 Mark Mitchell <mark@codesourcery.com> + + PR c++/23841 + * g++.dg/parse/template17.C: New test. + 2005-09-12 Mark Mitchell <mark@codesourcery.com> PR c++/23789 diff --git a/gcc/testsuite/g++.dg/parse/template17.C b/gcc/testsuite/g++.dg/parse/template17.C new file mode 100644 index 0000000000000000000000000000000000000000..ade598d39e1b4cdf535a527f20a7a0ba9335bc99 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/template17.C @@ -0,0 +1,13 @@ +// PR c++/23841 + +template <int I> +struct S +{ + int f(int i = I) { return i; } +}; + +void +g () +{ + S<(int)0.> a2; +}