On Tuesday, 23 July 2013 at 16:34:54 UTC, John Colvin wrote:
void foo(ref int a) { a = 5; }void main() { int a = 0; int* aptr = &a; foo(*aptr); assert(a == 5); a = 0; int b = *aptr; foo(b); assert(b == 5); assert(a == 0); }The fact that adding an explicit temporary changes the semantics seems weird to me.
Thanks for the explanations people, I have now fixed a rather worrying mistake in my programming knowledge: WHAT IT ACTUALLY MEANS TO DEREFERENCE A POINTER!
Seriously, I've written programs in assembly and I still had it wrong. It's a wonder I ever wrote any correct code in my life.
