On 02.03.18 21:39, Steven Schveighoffer wrote: > On 3/2/18 3:23 PM, Christian Köstlin wrote: >> To give an example: >> >> class Thread { >> ... >> Thread start() {...} >> } >> >> class Timer : Thread { >> ... >> } >> >> >> void main() { >> // Timer timer = new Timer().start; // this does not work >> auto timer = new Timer().start; // because timer is of type Thread >> } > > Yes: > > class Timer : Thread { > override Timer start() { ... } > } > > https://dlang.org/spec/function.html#virtual-functions > > (see item 6) > > -Steve Thanks for this. It works for me only without the override (with override I get Error: function timer.Timer.start does not override any function, did you mean to override 'core.thread.Thread.start'?).
Although I wonder if its possible to "fix" this in the Thread class with some dlang magic. e.g. traits class Thread { traits(GetClass) start() {...} } or perhaps class ThreadHelper(T) : Thread { override T start() {return cast(T)super.start();} } class Timer : Thread!Timer { }