On Friday 03 September 2010 14:22:46 Andrei Alexandrescu wrote: > On 9/3/10 16:03 CDT, bearophile wrote: > > JMRyan: > >> Is this a bug in the compiler (v.2.047)? Am I missing something in > >> thinking it shouldn't be? > > > > I think it's not a bug. It's not a common need, but a method may way want > > to swap this with another. In Phobos this is done on a struct, see: > > http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/stdio.d# > > L324 > > > > Bye, > > bearophile > > For classes this must be an rvalue. > > Andrei
There is no value in this being assignable in a class, but at the lower level of how the functions are actually declared underneath (with them taking this as an argument), it makes perfect sense that it would work. It certainly wouldn't be bad to disallow it though, since it's pointless and is just going to cause bugs, though generally not as bad as the ones in the OP's example (since he assigned to this in the constructor). Still, I don't know how you could make it a true rvalue. You'd need the ability to pass a const reference to non-const data to do that, and D doesn't allow for that. The invisible this parameter, being a reference, is going to suffer from all of the issues with const that have been oft-discussed (though, generally what people want is a non-const reference to const data rather than a const reference to non-const data like you would need for this). - Jonathan M Davis
