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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|CLOSED                      |RESOLVED
         Resolution|WONTFIX                     |INVALID

--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-12-21 
16:08:15 UTC ---
(Setting status back to RESOLVED+INVALID, we don't use CLOSED in GCC's
bugzilla, and WONTFIX is not appropriate because no G++ dev has agreed there is
a bug here and said it won't be fixed.)

(In reply to comment #0)
> 
> template<typename T>
> const T & max(const T & x, const T & y){
>     return (x < y) ? y : x;
> }

This template has valid syntax. It follows the rules of the C++ grammar.
Whether it can be compiled depends on the template arguments.

> struct name {};
> 
> void test3(){
>     name x, y, z;
>     z = max(x, y); // error name doesn't have < operator

That function call also has valid syntax. It follows the rules of the C++
grammar.

> This looks like a bug to me.  For what it's worth, this second example fails 
> to
> compile with MSVC 9.0 pointing to an error for lack of operator < as one would
> expect.

It fails to *compile* with G++ too, but using -fsyntax-only doesn't do
compilation.



(In reply to comment #7)
> what I expected was that -fsyntax-only would run the normal process but skip
> the code generation.  I don't think that's an unreasonable expectation from 
> the
> name of the option and the simple description of it.
> 
> Also I wouldn't characterize the program as not having any syntax errors.  The
> first example
> 
> name test2(){
>     name x, y;
>     return (x < y) ? y : x;
> }
> 
> generates an compile time error as one would expect.  If the same code were
> placed inside a macro, it would also provoke an error.  Then you move it into
> at template - and voila - no syntax error.

Templates are not just fancy macros, you know C++ well enough to know that.


>  This is not regular or intuitive
> behavior.  When you tested it you also expected to see an error - to the 
> extent
> you tried on several versions of gcc.

When I tested it I *did* see an error. I tested several versions because I was
trying to reproduce your reported lack of an error, because I missed you were
using -fsyntax-only


> If your asking me what I want, I would respond that the current behavior of 
> the
> -fsyntax-only is inconsistent and confusing and has room for improvement.  
> It's
> not much of an answer to say "don't do that".  Taken to it's logical
> conclusion, you might just skip emission of compile time errors all together
> and replace them with the admonition - don't write incorrect code !

That's not the logical conclusion, it's a strawman.  If a user complains that
omitting the -g flag causes there to be no debug symbols in their objects,
they've apparently misunderstood the purpose of the option and "don't do that"
is a reasonable answer.

Reply via email to