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)
+        ;
+}

Reply via email to