[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc
Subject:    RFI: g++(templates): confusing error messages.
From:       Sergei Organov <osv () javad ! com>
Date:       2007-05-30 11:02:04
Message-ID: 87odk2shg3.fsf () javad ! com
[Download RAW message or body]

Hello,

$ g++ -c err.cc
err.cc:7: error: prototype for 'void C<int>::foo(const int&)' does not match any in class 'C<int>'
err.cc:3: error: candidate is: void C<T>::foo(const T&) [with T = int]
err.cc:7: error: template definition of non-template 'void C<int>::foo(const int&)'
$

Note that substituting 'int' for 'T' in the only candidate (reported in
error line 2) gives exactly the prototype in error line 1. Yes, the
third error line gives a clue, but the natural way to read error
messages is top-to-bottom, and the first two lines are really
puzzling. It'd be much better if the first two lines of the error
messages were not output at all, I think.

$ cat err.cc
template <typename T>
struct C {
  void foo(T const&) {}
};

template <typename T>
void C<int>::foo(int const&) {}

$ g++ -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: [...]
Thread model: posix
gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
$

-- Sergei.
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic