[Issue 16194] auto return type inference depends on return statement order
    via Digitalmars-d-bugs 
    digitalmars-d-bugs at puremagic.com
       
    Wed Jun 22 13:29:59 PDT 2016
    
    
  
https://issues.dlang.org/show_bug.cgi?id=16194
--- Comment #2 from ZombineDev <petar.p.kirov at gmail.com> ---
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]
--
    
    
More information about the Digitalmars-d-bugs
mailing list