On Wednesday, 3 May 2017 at 07:37:31 UTC, Jacob Carlborg wrote:
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.

Yes, the compiler is inferring the return type. However, it _should_ be inferring it as void, and the override in B should then be illegal. If I stick

    pragma(msg, typeof(print));

right after each declaration for print, then it prints

@system void()

for A and

void()

for B, which is odd, since both should be @system. Interestingly, if both have pragmas at the same time, _then_ I get a compilation error:

qd.d(11): Error: function qd.B.print cannot override final function qd.A.print

So, I'd say that there's definitely a bug here.

Reply via email to