cp/ChangeLog
PR c++/48994
* parser.c (cp_parser_perform_range_for_lookup): Call complete_type.
testsuite/ChangeLog
PR c++/48994
* g++.dg/cpp0x/range-for18.C: New.
Tested x86_64-linux, ok for trunk?
Index: cp/parser.c
===================================================================
--- cp/parser.c (revision 173683)
+++ cp/parser.c (working copy)
@@ -8682,7 +8682,7 @@
static tree
cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end)
{
- if (!COMPLETE_TYPE_P (TREE_TYPE (range)))
+ if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (range))))
{
error ("range-based %<for%> expression of type %qT "
"has incomplete type", TREE_TYPE (range));
Index: testsuite/g++.dg/cpp0x/range-for18.C
===================================================================
--- testsuite/g++.dg/cpp0x/range-for18.C (revision 0)
+++ testsuite/g++.dg/cpp0x/range-for18.C (revision 0)
@@ -0,0 +1,17 @@
+// PR c++/48994
+
+// { dg-do compile }
+// { dg-options "-std=c++0x" }
+
+template <typename T>
+struct myvec
+{
+ T* begin() const;
+ T* end() const;
+};
+
+void f(const myvec<int>& v)
+{
+ for (int i : v)
+ ;
+}