https://issues.dlang.org/show_bug.cgi?id=16194
--- Comment #2 from ZombineDev <[email protected]> --- No, I think this is specific only to class sub-typing. For example the following compiles successfully and prints "4", "3.4" and "99". In other words, it actually finds the common type of all return statements (in this case - double) void main() { import std.stdio; fun(2).writeln(); fun(4).writeln(); fun(6).writeln(); } auto fun(int a) { if (a < 3) return 4; else if (a < 5) return 3.4; else return 'c'; } I'm not particularly bothered by this deficiency of the compiler, just wanted to report it. Also note that this deficiency is does not affect type inference of array literals: void main() { import std.stdio; [1, 'c', 3.4].writeln(); [2.3, 'c', true].writeln(); ['c', 2, 3.5].writeln(); [new A(), new B(), new C()].writeln(); [new B(), new A(), new C()].writeln(); [new C(), new B(), new A()].writeln(); } class A {} class B : A {} class C : A {} Prints: 1, 99, 3.4] [2.3, 99, 1] [99, 2, 3.5] [test.A, test.B, test.C] [test.B, test.A, test.C] [test.C, test.B, test.A] --
