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.