------- Additional Comments From gdr at integrable-solutions dot net 2005-03-27 03:16 ------- Subject: Re: Do not print default template arguments in error messages
"giovannibajo at libero dot it" <[EMAIL PROTECTED]> writes: | (In reply to comment #31) | | > >Patched: | > >test.cc: In member function 'void A<T, N, X>::foo() [with T = int]': | > >test.cc:14: instantiated from here | > >test.cc:9: error: 'class std::vector<int>' has no member | named 'doesnotexist' | > | > That's a good improvement, but do you think you could write the first line | > with A<T> instead of A<T,N,X>? I find it confusing to see the second and | > third template argument, but then no explanation as to their values... | | That's exactly what I was hinting at at the end of comment #7. I then | implemented the solution proposed in comment #8 (showing them with <default>), | until Gaby said it would be a showstopper. *If* you print N and X then yes it is surprising not to say what they bind to ("explanation"); but "<default>" is not good. However, if you do not print them, then you don't have to explain what they mean. | I will investigate printing A<T> instead of A<T,N,X>, but I am not confident it | can be done easily (if at all). If you're going to print only the binding of "T", and not for N nor X, then you do know that you don't have to print them, i.e. they are instantiated with default values. Granted, as the code in error.c currently is, you would have those information only after the fact (in dump_bindings()). However, the code path in cxx-pretty-print.c is different and more amenable to that kind of thing. Alternatively, you could do lazy printing with error.c but that is more complicated than it should be. -- Gaby -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14912