Volatile MEMs in statement expressions and functions inlined as trees

Gabriel Dos Reis gdr@codesourcery.com
Sun Dec 16 01:35:00 GMT 2001


Linus Torvalds <torvalds@transmeta.com> writes:

| On 16 Dec 2001, Gabriel Dos Reis wrote:
| >
| > No, you're on the wrong page.  That specific example is given in a
| > specific context to disprove a specific (bogus) claim you made.
| 
| Ehh.. You posted that (again) in response to
| 
| 	| If you override the assignment operator, then the rules of  assignment are
| 	| defined by _you_, not by the C++ standard.
| 
| and that is certainly not a bogus claim. 

You stripped out the context.  Here it is:

  | If you override the assignment operator, then the rules of assignment are
  | defined by _you_, not by the C++ standard. 

  The implicitly generated copy and assignment operator is defined by
  the C++ standard.  Again consider:

	  struct X { };

	  int main()
	  {
	    X x;
	    X() = x;
	    return 0;
	  }



| You gave it as an example of
| something completely different, namely the implicit copy-assignment
| operator, which was not even under discussion.

Not at all.

I gave it to show two things:
   1) rvalues of class-type are "addressable";
   2) to disprove your unfonded claim that lvalues are always on the
      left and rvalues on the right of assignment.

| And which, as I've pointed out, doesn't even _cover_ "volatile"
| assignments. Exactly because "volatile" is always a property of an object
| or function,

In the same way "const" is the property of the object, not of a class
-- the nonsense is to try to speak of cvs-qualified class.

| > | There are no implicit volatile assignment operators, because there are no
| > | volatile classes.
| >
| > That is nonsense.
| 
| No.
| 
| If there were a notion of a "volatile class X", then your example would be
| valid.

The point here is that your line of reasoning is bogus: there is no
notion of "const class X" and yet there is an assignment taking a
"const X&".  Trying to reason along the line that "a notion of 
'cv-qualified class X' is a preresite for existence of X::operator=(cv
X&) is just plain bogus".  That is why I pointed you to 12.8/10.

[...]

| And yes, I've read your precious "12.8.10". MY point, which you obviously
| missed, is that if the "volatile" _could_ be part of the definition of the
| class X, then the implicit assignment operator
| 
| 	X& X::operator={const X&}
| 
| _would_ have relevance to the problem of volatile assignments (because the
| "volatile" would be part of the definition of the class X itself).

I didn't miss that bogus reasoning.  It is precisely that bogus
reasoning I'm arguing with.  cv-qualification is never part of the
definition of a class, and yet we have assignment operator taking a
cv-qualified reference.

| See my argument?

I saw, it was bogus and now we've strenghten its "bogusness".

| In short, class assignments, _whether_ explicit or implicit, do not have
| any relevance.

Its relevance here is to show you that rvalue in C++ is not what you
think it is.  I didn't claim that objet of class-type assignment
explains the re-load.  Please don't put words in my mouth. I gave that
example to disprove specific unfonded claims you made.   

-- Gaby
CodeSourcery, LLC                       http://www.codesourcery.com



More information about the Gcc-patches mailing list