I've tried to get into the changes by DIP1000 and discovered this: struct S { ref S id() return { return this; } } void main() { S* p = &S().id(); } Should it really compile? (rdmd -dip1000 .\test_return_ref.d)