template interface and delegates
Steven Schveighoffer
schveiguy at yahoo.com
Mon Mar 31 13:48:16 PDT 2014
On Mon, 31 Mar 2014 14:58:30 -0400, anonymous <non at trash-mail.com> wrote:
> Hi,
> I'm new to D and played a bit with templates and delegates.
> Now i discovered some behaviore that i don't understand.
> Can somebody explain me why i get two different outputs?
>
>
> import std.stdio;
>
>
> interface A(T){
> bool GetBool();
> T getT();
> }
>
> class C:A!(double){
> override bool GetBool(){
> return false;
> }
> override double getT(){
> return 1;
> }
> }
>
> void mwriteln(T)( A!T delegate() dg){
> writeln(dg().getT());
> }
>
> void main()
> {
> auto c = new C();
> writeln(c.getT());
> mwriteln!double({return new C();});
> }
This is definitely a bug.
Reduced case:
import std.stdio;
interface A{
void foo();
}
class C:A{
override void foo(){
writeln("here");
}
}
void x( A delegate() dg){
dg().foo();
}
void main()
{
A c = new C;
c.foo(); // prints "here"
x({A a = new C; return a;}); // prints "here"
x({return new C;}); // does not print
}
This is really an issue with delegate return type inferrence not working
properly.
-Steve
More information about the Digitalmars-d-learn
mailing list