Another issue: @safe: void foo(ref int, ref int) { } void test() { int b; int* a = &b; int* c = &b; // foo( b, b); // error foo( *a, *c); // but this is ok }