struct A {} static A bar() { return A(); } void foo(ref A a) {} void main() { foo(A()); // works foo(bar()); // doesn't } Where's the difference?