Commit 570e2ca0 by Jason Merrill Committed by Jason Merrill

re PR c++/56794 (C++11 Error in range-based for with parameter pack array)

	PR c++/56794
	* parser.c (cp_parser_range_for): Don't try to do auto deduction
	in a template if the type of the range is incomplete.

From-SVN: r197324
parent 123d7a94
2013-04-01 Jason Merrill <jason@redhat.com> 2013-04-01 Jason Merrill <jason@redhat.com>
PR c++/56794
* parser.c (cp_parser_range_for): Don't try to do auto deduction
in a template if the type of the range is incomplete.
* call.c (add_function_candidate): Take the address of 'this' here. * call.c (add_function_candidate): Take the address of 'this' here.
(build_over_call): And here. (build_over_call): And here.
(build_new_method_call_1, build_op_call_1): Not here. (build_new_method_call_1, build_op_call_1): Not here.
......
...@@ -9615,7 +9615,10 @@ cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl) ...@@ -9615,7 +9615,10 @@ cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl)
range_expr = error_mark_node; range_expr = error_mark_node;
stmt = begin_range_for_stmt (scope, init); stmt = begin_range_for_stmt (scope, init);
finish_range_for_decl (stmt, range_decl, range_expr); finish_range_for_decl (stmt, range_decl, range_expr);
if (!type_dependent_expression_p (range_expr) if (range_expr != error_mark_node
&& !type_dependent_expression_p (range_expr)
/* The length of an array might be dependent. */
&& COMPLETE_TYPE_P (TREE_TYPE (range_expr))
/* do_auto_deduction doesn't mess with template init-lists. */ /* do_auto_deduction doesn't mess with template init-lists. */
&& !BRACE_ENCLOSED_INITIALIZER_P (range_expr)) && !BRACE_ENCLOSED_INITIALIZER_P (range_expr))
do_range_for_auto_deduction (range_decl, range_expr); do_range_for_auto_deduction (range_decl, range_expr);
......
// PR c++/56794
// { dg-require-effective-target c++11 }
template<int... values>
static void Colors()
{
static const int colors[] = { values... };
for(auto c: colors) { }
}
int main()
{
Colors<0,1,2> ();
}
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