template<int a> struct s{}; s<static_cast<int>(4>>2)> x; This works in C++98 mode but fails in C++11 mode. Maybe g++ misunderstands >> as closing angle brackets, but this does not make sense because they are in (). clang++ compiles this code. This looks like bug 37875 but for casts.
Created attachment 30416 [details] gcc49-pr57771.patch Untested fix.
Author: jakub Date: Wed Jul 3 20:20:30 2013 New Revision: 200647 URL: http://gcc.gnu.org/viewcvs?rev=200647&root=gcc&view=rev Log: PR c++/57771 * parser.c (cp_parser_postfix_expression) <case RID_STATCAST> Temporarily set parser->greater_than_is_operator_p for cp_parser_expression and restore from saved value afterwards. * g++.dg/template/arg9.C: New test. Added: trunk/gcc/testsuite/g++.dg/template/arg9.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/parser.c trunk/gcc/testsuite/ChangeLog Author: jakub Date: Wed Jul 3 20:22:16 2013 New Revision: 200648 URL: http://gcc.gnu.org/viewcvs?rev=200648&root=gcc&view=rev Log: PR c++/57771 * parser.c (cp_parser_postfix_expression) <case RID_STATCAST> Temporarily set parser->greater_than_is_operator_p for cp_parser_expression and restore from saved value afterwards. * g++.dg/template/arg9.C: New test. Added: branches/gcc-4_8-branch/gcc/testsuite/g++.dg/template/arg9.C Modified: branches/gcc-4_8-branch/gcc/cp/ChangeLog branches/gcc-4_8-branch/gcc/cp/parser.c branches/gcc-4_8-branch/gcc/testsuite/ChangeLog