From 71b04de2fb6c33227da78045728e52401081a759 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 14 May 2013 16:36:32 -0400 Subject: [PATCH] re PR c++/57243 (Using auto in range based for with templated container in templated function requires extraneous template qualifier) PR c++/57243 * parser.c (cp_parser_range_for): Call complete_type. From-SVN: r198901 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/parser.c | 2 +- gcc/testsuite/g++.dg/cpp0x/range-for25.C | 30 ++++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/range-for25.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1dae892c..aea304b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2013-05-14 Jason Merrill + PR c++/57243 + * parser.c (cp_parser_range_for): Call complete_type. + PR c++/57041 * pt.c (tsubst_copy_and_build): Don't recur into a designator. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index f65ec97..0a075b2 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -9735,7 +9735,7 @@ cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl) 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)) + && COMPLETE_TYPE_P (complete_type (TREE_TYPE (range_expr))) /* do_auto_deduction doesn't mess with template init-lists. */ && !BRACE_ENCLOSED_INITIALIZER_P (range_expr)) do_range_for_auto_deduction (range_decl, range_expr); diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for25.C b/gcc/testsuite/g++.dg/cpp0x/range-for25.C new file mode 100644 index 0000000..8ba9f65 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/range-for25.C @@ -0,0 +1,30 @@ +// PR c++/57243 +// { dg-require-effective-target c++11 } + +struct snarf +{ + template + void get() {} +}; + +template +struct container +{ + snarf * begin() { return nullptr; } + snarf * end() { return nullptr; } +}; + +template +void foo() +{ + container arr; + + for( auto i : arr ) + i.get(); +} + +int main() +{ + return 0; +} + -- 2.7.4