On 2017-05-03 08:54, nkm1 wrote:
Consider:

import std.stdio;

class A
{
     final print() { writeln(this); } // no return type
}

class B : A
{
     final void print() { writeln(this); }
}

void main()
{
     auto b = new B;
     b.print();

     A a1 = b;
     a1.print();

     A a2 = new A;
     a2.print();
}

That compiles:

$ dmd -de -w -g ./main.d
$ main
main.B
main.B
main.A

with dmd 2.074 on linux:

$ dmd --version
DMD64 D Compiler v2.074.0
Copyright (c) 1999-2017 by Digital Mars written by Walter Bright

Is that a bug? (in the compiler). I'm learning D, and I'm half way
through Andrei's book; I also read the documentation (on D's website)
and I think that shouldn't compile?

It might be by accident but I think the compiler is inferring the return type. Just as "auto" is not necessary to infer the type of a variable if there's another attribute:

auto a = 3;
const auto b = 4; // here "auto" is redundant
const c = 5;

In your case you have "final" as the attribute.

--
/Jacob Carlborg

Reply via email to