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
 
 


             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: link
Be 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).