public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Joe Buck <Joe.Buck@synopsys.COM>
To: Ziemowit Laski <zlaski@apple.com>
Cc: gcc mailing list <gcc@gcc.gnu.org>, Matt Austern <austern@apple.com>
Subject: Re: generalized lvalues
Date: Thu, 18 Nov 2004 23:45:00 -0000	[thread overview]
Message-ID: <20041118154322.A32680@synopsys.com> (raw)
In-Reply-To: <852F83A5-39B9-11D9-8317-00039390FFE2@apple.com>; from zlaski@apple.com on Thu, Nov 18, 2004 at 03:28:15PM -0800

On Thu, Nov 18, 2004 at 03:28:15PM -0800, Ziemowit Laski wrote:
> So, at least as far as Apple is concerned, it would be great if the 
> casts-as-lvalues functionality were retained in GCC. :-)  Of course, if 
> the compiler is run in -strict/-pedantic/-ansi/whatever mode, it should 
> be free to reject this construct if it is not in the appropriate 
> standard.  It's just that there are C/C++ usage idioms out there (as 
> non-standard as they may be) for which the lvalue cast is a better 
> semantic fit than any alternative.

The main reason why cast-as-lvalue is bad news for C++ is its effect
on overloading.  Consider:

void func(const Type&);
void func(Type&);

...

	func((Type)expression);

cast-as-lvalue causes the wrong overloaded function to be called.
The user would expect the cast to produce a temporary, meaning that
the const version is called; however, because of the extension, the
non-const version is called.  This is not a small matter; given a
non-const reference we can normally be sure that we have a real object
of the given type, that we can write that object, save its address, etc.
With a non-const reference, it might be bound to a temporary.

Notice that in the above example, the programmer had no idea that his
or her code was affected by an extension.  There are two versions of
func and the compiler chooses the wrong one.  We shouldn't require
-ansi or -pedantic to make correct code work correctly; in the past,
we just use them to reject more incorrect code.

If you must retain this extension, then at minimum we would need to
prevent cast-as-lvalue from modifying the type of the cast expression
for the purposes of overloading; even though it's an lvalue for the
purpose of assignment, it can't be treated as an lvalue for purposes
of operator overloading.  That might be tricky.


 
> I'll attempt to address the various technical reasons for removing 
> lvalue casts in a separate e-mail.  For the time being, though, I just 
> wanted to express a partisan viewpoint on the issue. :-)
> 
> Thanks,
> 
> --Zem
> --------------------------------------------------------------
> Ziemowit Laski                 1 Infinite Loop, MS 301-2K
> Mac OS X Compiler Group        Cupertino, CA USA  95014-2083
> Apple Computer, Inc.           +1.408.974.6229  Fax .5477

  parent reply	other threads:[~2004-11-18 23:43 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-11-18  3:50 Matt Austern
2004-11-18  3:52 ` Andrew Pinski
2004-11-18  4:01 ` Andrew Pinski
2004-11-18  4:18   ` Daniel Berlin
2004-11-18  4:21   ` Andrew Pinski
2004-11-18  4:27     ` Matt Austern
2004-11-18  7:15       ` Joe Buck
2004-11-18  7:37         ` Matt Austern
2004-11-18 13:17           ` Giovanni Bajo
2004-11-18 17:57           ` Joe Buck
2004-11-18 18:28         ` Mike Stump
2004-11-18 18:44           ` Joe Buck
2004-11-19  1:39             ` Mike Stump
2004-11-19  4:52               ` Matt Austern
2004-11-19 22:24                 ` Michael Matz
2004-11-19 22:30                   ` Robert McNulty Junior
2004-11-20  1:00                   ` Ziemowit Laski
2004-11-20  1:20                     ` Joe Buck
2004-11-20  1:51                       ` Ziemowit Laski
2004-11-20  5:04                         ` Joe Buck
2004-11-20  5:17                           ` Ziemowit Laski
2004-11-22 20:54                             ` generalized lvalues -- patch outline Ziemowit Laski
2004-11-22 21:01                               ` Andrew Pinski
2004-11-22 21:11                                 ` Ziemowit Laski
2004-11-22 21:39                                 ` Matt Austern
2004-11-22 22:11                                   ` Joe Buck
2004-11-22 22:12                                     ` Matt Austern
2004-11-23  0:06                                       ` Gabriel Dos Reis
2004-11-23  0:04                                   ` Gabriel Dos Reis
2004-11-23  0:27                                     ` Mike Stump
2004-11-24 20:40                                     ` Kai Henningsen
2004-11-23  0:11                                   ` Mark Mitchell
2004-11-23  1:19                                     ` Matt Austern
2004-11-23  1:26                                       ` Mark Mitchell
2004-11-23  1:32                                         ` Dale Johannesen
2004-11-23  1:42                                           ` Mark Mitchell
2004-11-23  1:45                                           ` Andrew Pinski
2004-11-23  1:55                                             ` Dale Johannesen
2004-11-23  1:56                                               ` Andrew Pinski
2004-11-23  2:12                                                 ` Dale Johannesen
2004-11-23  2:10                                               ` Marcus G. Daniels
2004-11-23  9:43                                       ` Eric Botcazou
2004-11-23 18:27                                       ` Aaron W. LaFramboise
2004-11-22 21:23                               ` Nathan Sidwell
2004-11-22 22:33                                 ` Ziemowit Laski
2004-11-23  0:09                                   ` Gabriel Dos Reis
2004-11-23  9:54                                   ` Nathan Sidwell
2004-11-23 13:35                                     ` Michael Matz
2004-11-23 14:56                                       ` Daniel Berlin
2004-11-23 15:02                                         ` Michael Matz
2004-11-23 15:15                                           ` Andrew Pinski
2004-11-23 15:47                                             ` Michael Matz
2004-11-23 15:56                                               ` Gabriel Dos Reis
2004-11-23 15:50                                             ` Steve Naroff
2004-11-23 15:51                                               ` Gabriel Dos Reis
2004-11-23 16:50                                             ` Eric Botcazou
2004-11-23 17:01                                               ` Paul Koning
2004-11-23 17:16                                                 ` Andreas Schwab
2004-11-23 18:03                                                 ` Thomas Kunert
2004-11-23 18:30                                                   ` Nathan Sidwell
2004-11-23 18:57                                                     ` Thomas Kunert
2004-11-23 21:21                                                   ` Paul Koning
2004-11-23 21:52                                                     ` Thomas Kunert
2004-11-23 15:51                                           ` Gabriel Dos Reis
2004-11-23 16:12                                             ` Michael Matz
2004-11-23 16:31                                               ` Richard Guenther
2004-11-23 16:44                                               ` Andreas Schwab
2004-11-23 20:16                                               ` Gabriel Dos Reis
2004-11-23 15:01                                       ` Nathan Sidwell
2004-11-23 15:09                                         ` Michael Matz
2004-11-23 19:11                                         ` Matt Austern
2004-11-23 21:10                                           ` Eric Botcazou
2004-11-23 21:34                                     ` Ziemowit Laski
2004-11-23 22:09                                       ` Joseph S. Myers
2004-11-23 22:23                                         ` Eric Botcazou
2004-11-23 22:27                                           ` Joseph S. Myers
2004-11-24  0:05                                             ` Eric Botcazou
2004-11-24  0:07                                               ` Steven Bosscher
2004-11-24  0:32                                               ` Joseph S. Myers
2004-11-25  8:41                                                 ` Ian Lance Taylor
2004-11-25 20:41                                                   ` Gabriel Dos Reis
2004-11-25 21:54                                                     ` Matt Austern
2004-11-25 23:27                                                       ` Gabriel Dos Reis
2004-11-29 18:06                                                       ` Joe Buck
2004-11-29 18:57                                                         ` Matt Austern
2004-11-23 23:27                                         ` Gabriel Dos Reis
2004-11-23 22:24                                       ` Nathan Sidwell
2004-11-23  0:07                                 ` Gabriel Dos Reis
2004-11-24 20:43                                   ` Kai Henningsen
2004-11-24 23:09                                     ` Gabriel Dos Reis
2004-11-24 23:17                                       ` Zack Weinberg
2004-11-22 21:31                               ` Richard Henderson
2004-11-23  0:11                                 ` Gabriel Dos Reis
2004-11-23  0:03                               ` Jonathan Lennox
2004-11-20  1:40                     ` generalized lvalues Joseph S. Myers
2004-11-18 19:11           ` Alex Rosenberg
2004-11-18  4:24   ` Matt Austern
2004-11-18  5:33 ` Dale Johannesen
2004-11-18 17:14 ` Fariborz Jahanian
2004-11-18 18:23   ` Joe Buck
2004-11-19  0:20     ` Ziemowit Laski
2004-11-19  0:40       ` Steven Bosscher
2004-11-19  1:20       ` Joe Buck
2004-11-19  2:00         ` Ziemowit Laski
2004-11-18 23:36 ` Ziemowit Laski
2004-11-18 23:37   ` Matt Austern
2004-11-18 23:49     ` Zack Weinberg
2004-11-19  1:38       ` Ziemowit Laski
2004-11-19  2:52         ` Zack Weinberg
2004-11-19  3:56           ` Ziemowit Laski
2004-11-19  4:22             ` Zack Weinberg
2004-11-19 13:10         ` Nathan Sidwell
2004-11-19 21:58           ` Ziemowit Laski
2004-11-18 23:44   ` Andrew Pinski
2004-11-18 23:45   ` Joe Buck [this message]
2004-11-25  4:42 ` Aaron W. LaFramboise

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=20041118154322.A32680@synopsys.com \
    --to=joe.buck@synopsys.com \
    --cc=austern@apple.com \
    --cc=gcc@gcc.gnu.org \
    --cc=zlaski@apple.com \
    /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).