On 03/30/2015 11:32 AM, Steven Schveighoffer wrote: > On 3/30/15 5:12 AM, "Marc =?UTF-8?B?U2Now7x0eiI=?= <schue...@gmx.net>" > wrote: >> >> `this` is already a reference. You're taking the address of that >> reference. A simple cast should work: `cast(void*) this`. > > To build on this further, &this for a class is actually taking a local > stack reference, this is why it's not allowed. > > And technically, cast(void*) this is dangerous in the general case > because opCast can be overridden. If you absolutely need to get a > pointer to a class reference, you would need to do this: > > auto x = this; > auto p = &x; > > For example, for a foolproof implementation of converting a class > reference to void *, you would need to do: > > auto x = this; > auto p = *(cast(void **)&x); > > I wonder if those who made this change thought of this problem? > > -Steve
Thanks for the explanation. This makes a lot of sense - I forgot that "ref" actually means "special pointer." Luckily, I don't plan on overriding opCast! -- Paul O'Neil Github / IRC: todayman