Test code 1: --------------------------- class K {} auto f(bool b) { if (b) return new K; else return null; } --------------------------- x.d(6): Error: mismatched function return type inference of void* and x.K --------------------------- Test code 2: --------------------------- auto f(bool b) { if (b) return new int; else return null; } --------------------------- x.d(5): Error: mismatched function return type inference of void* and int* --------------------------- DMD should know that 'null' is a valid value for any reference types. A workaround is to give an exact type, e.g. --------------------------- auto f(bool b) { if (b) return new int; // or new K; else { typeof(return) n = null; return n; } } --------------------------- but this should not be necessary. (Perhaps the D spec should give a specific type e.g. 'nullptr_t' for 'null'?)
https://github.com/D-Programming-Language/dmd/pull/476
https://github.com/D-Programming-Language/dmd/commit/31a3e406938cef17c8c6354ac5de70ad07707027