http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53412

             Bug #: 53412
           Summary: Error recovery for class types is poor
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: pins...@gcc.gnu.org


Take:
#include <vector>
std::vector<i*> a;
void f(int*b)
{
a.pushback(b);
}

--- CUT---
On the trunk we get the following error messages:
t344.cc:3:13: error: ‘i’ was not declared in this scope
 std::vector<i*> a;
             ^
t344.cc:3:15: error: template argument 1 is invalid
 std::vector<i*> a;
               ^
t344.cc:3:15: error: template argument 2 is invalid
 std::vector<i*> a;
               ^
t344.cc:3:18: error: invalid type in declaration before ‘;’ token
 std::vector<i*> a;
                  ^
t344.cc: In function ‘void f(int*)’:
t344.cc:7:3: error: request for member ‘pushback’ in ‘a’, which is of non-class
type ‘int’
 a.pushback(b);
   ^


--- CUT ---
The last one seems just plain wrong.  Why did the C++ front-end record a as
type int rather than using error_mark_node? 
Also the fourth error message seems wrong too as we already have an error that
the type was invalid.
The second and third ones are not really needed for default template arguments
if we already have an error out about the non defaulted ones.

Reply via email to