public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: "Darren Reed \(OSE\)" <darrenr@optimation.com.au> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, Subject: RE: c++/10273: g++ fails to compile sort() with a template operator that takes a pointer Date: Tue, 01 Apr 2003 00:26:00 -0000 [thread overview] Message-ID: <20030401002601.20592.qmail@sources.redhat.com> (raw) The following reply was made to PR c++/10273; it has been noted by GNATS. From: "Darren Reed \(OSE\)" <darrenr@optimation.com.au> To: "Wolfgang Bangerth" <bangerth@ices.utexas.edu> Cc: <gcc-bugs@gcc.gnu.org>, <gcc-gnats@gcc.gnu.org> Subject: RE: c++/10273: g++ fails to compile sort() with a template operator that takes a pointer Date: Tue, 1 Apr 2003 10:10:46 +1000 > > Is it unreasonable to ask for a better error message in this case ? > > Or perhaps better checking of templates ? (This would probably cause > > a more accurate error message to be output.) > > I guess in this case, the error message is as clear as it can be: the > declaration of the template is legal (you parameterize it on a value, not > on a type as you had expected) so there is nothing the compiler could have > told you there. Then you tried to use the template with a type instead of > the required value and the compiler told you > x.cc: In function `void std::doit()': > x.cc:31: type/value mismatch at argument 1 in template parameter list for ` > template<std::ClassName*<anonymous> > struct std::xLess' > x.cc:31: expected a constant of type `std::ClassName*', got `std::ClassName*' > > I think the message says it quite clearly: first the type/value mismatch, > then in addition that it expected a value and got a type. What more do you > want? Ok, so you know how to parse that message better than I do. To me it says "expected type 'A', got 'A'" (where A is "std::ClassName*") and hence it does not make any sense to me. I'm the programmer, so because I don't intend for there to be a value there, I don't see a value there. The error doesn't tell me that using * implies a value is being used in a template where a type should be. Just for the sake of comparison, I tried compiling the same piece of code with Visual Studio .Net and SUNWspro CC. Both of those compilers (rightly or wrongly, I don't know) complain about the code when it comes to parsing the template statement. In my situation, this type of verbosity helps. d:\Documents and Settings\darrenr\My Documents\Visual Studio Projects\foo\foo2.cpp(17) : error C2504: 'binary_function' : base class undefined d:\Documents and Settings\darrenr\My Documents\Visual Studio Projects\foo\foo2.cpp(23) : see reference to class template instantiation 'std::xLess<>' being compiled d:\Documents and Settings\darrenr\My Documents\Visual Studio Projects\foo\foo2.cpp(17) : error C2143: syntax error : missing ',' before '<' d:\Documents and Settings\darrenr\My Documents\Visual Studio Projects\foo\foo2.cpp(34) : error C2065: 'sort' : undeclared identifier d:\Documents and Settings\darrenr\My Documents\Visual Studio Projects\foo\foo2.cpp(34) : error C2975: 'std::xLess' : invalid template argument for 'function-parameter', constant expression expected d:\Documents and Settings\darrenr\My Documents\Visual Studio Projects\foo\foo2.cpp(23) : see declaration of 'std::xLess' d:\Documents and Settings\darrenr\My Documents\Visual Studio Projects\foo\foo2.cpp(34) : error C2514: 'std::xLess<__formal>' : class has no constructors with [ __formal=0 ] And the compiler from Sun (SUNWspro CC) has this to say: "/tmp/foo.cpp", line 14: Error: "," expected instead of "*". "/tmp/foo.cpp", line 14: Error: Expected "class" or "typename" before "*" . "/tmp/foo.cpp", line 14: Error: binary_function is not defined. "/tmp/foo.cpp", line 31: Where: While specializing "std::xLess<std::ClassName*>". "/tmp/foo.cpp", line 31: Where: Specialized in non-template code. "/tmp/foo.cpp", line 14: Error: "," expected instead of "<". "/tmp/foo.cpp", line 31: Where: While specializing "std::xLess<std::ClassName*>". "/tmp/foo.cpp", line 31: Where: Specialized in non-template code. "/tmp/foo.cpp", line 14: Error: binary_function is not defined. "/tmp/foo.cpp", line 31: Where: While specializing "std::xLess<std::ClassName*>". "/tmp/foo.cpp", line 31: Where: Specialized in non-template code. "/tmp/foo.cpp", line 14: Error: "," expected instead of "<". "/tmp/foo.cpp", line 31: Where: While specializing "std::xLess<std::ClassName*>". "/tmp/foo.cpp", line 31: Where: Specialized in non-template code. "/tmp/foo.cpp", line 14: Error: binary_function is not defined. "/tmp/foo.cpp", line 31: Where: While specializing "std::xLess<std::ClassName*>". "/tmp/foo.cpp", line 31: Where: Specialized in non-template code. "/tmp/foo.cpp", line 14: Error: "," expected instead of "<". "/tmp/foo.cpp", line 31: Where: While specializing "std::xLess<std::ClassName*>". "/tmp/foo.cpp", line 31: Where: Specialized in non-template code. "/tmp/foo.cpp", line 31: Error: The type "std::xLess<std::ClassName*>" is incomplete. "/tmp/foo.cpp", line 14: Error: binary_function is not defined. "/tmp/foo.cpp", line 31: Where: While specializing "std::xLess<std::ClassName*>". "/tmp/foo.cpp", line 31: Where: Specialized in non-template code. "/tmp/foo.cpp", line 14: Error: "," expected instead of "<". "/tmp/foo.cpp", line 31: Where: While specializing "std::xLess<std::ClassName*>". "/tmp/foo.cpp", line 31: Where: Specialized in non-template code. Darren
next reply other threads:[~2003-04-01 0:26 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2003-04-01 0:26 Darren Reed (OSE) [this message] -- strict thread matches above, loose matches on Subject: below -- 2003-04-01 2:36 Wolfgang Bangerth 2003-03-31 23:26 Darren Reed (OSE) 2003-03-31 16:10 bangerth 2003-03-31 10:11 Gabriel Dos Reis 2003-03-31 10:04 darrenr
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20030401002601.20592.qmail@sources.redhat.com \ --to=darrenr@optimation.com.au \ --cc=gcc-prs@gcc.gnu.org \ --cc=nobody@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).