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

Manuel López-Ibáñez <manu at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED

--- Comment #7 from Manuel López-Ibáñez <manu at gcc dot gnu.org> 2011-09-21 
14:28:05 UTC ---
(In reply to comment #6)
> N.B. that's even better than clang, as it tells you *why* substitution failed:
> the specialization Q<int> is incomplete

Great! 

I agree it is better that it tells you *why*, but g++'s output is also
extremely verbose: 2 diagnostics versus 8, plus the repetition of
'template<class T> F<typename Q<T>::t> g(const F<T>&)' and 'struct Q<int>'.
Moreover, the use of "note" and "error" is inconsistent.

I would wish for something like:

t.cc:17:9: error: no matching function for call to 'g'
t.cc:12:22: note: candidate template ignored: template argument
deduction/substitution failed [with T = int]
t.cc:12:22: note: reason: invalid use of incomplete type 'struct Q<int>'
t.cc:2:8: note: declared here

Current output will explode with large number of candidates and complex
template instantiations (e.g., STL stuff). But that is an old problem, in
general, and I guess hard to fix in g++.

Let's mark this as FIXED in GCC 4.7. If someone disagrees, just reopen it.

Reply via email to