Thread overview
Template specialization
Jan 23, 2014
Daniel Kozak
Jan 23, 2014
Timon Gehr
Jan 23, 2014
Daniel Kozák
January 23, 2014
import std.stdio;

class D : X{}

class X{}


template t1(T : void function(T)){enum t1 = "1.";}
template t1(T : void function(X)){enum t1 = "2.";}

int main(string[] argv){
    t1!(void function(D)).writeln();
    readln();
    return 0;
}

this code prints 1. on dmd and gdc but on ldc it prints 2.

Which one is correct?
January 23, 2014
On 01/23/2014 01:44 PM, Daniel Kozak wrote:
> import std.stdio;
>
> class D : X{}
>
> class X{}
>
>
> template t1(T : void function(T)){enum t1 = "1.";}
> template t1(T : void function(X)){enum t1 = "2.";}
>
> int main(string[] argv){
>      t1!(void function(D)).writeln();
>      readln();
>      return 0;
> }
>
> this code prints 1. on dmd and gdc but on ldc it prints 2.
>
> Which one is correct?

1. is correct. LDC will presumably print 1. as well as soon as it is updated to a more recent frontend version.
January 23, 2014
Timon Gehr píše v Čt 23. 01. 2014 v 15:42 +0100:
> On 01/23/2014 01:44 PM, Daniel Kozak wrote:
> > import std.stdio;
> >
> > class D : X{}
> >
> > class X{}
> >
> >
> > template t1(T : void function(T)){enum t1 = "1.";}
> > template t1(T : void function(X)){enum t1 = "2.";}
> >
> > int main(string[] argv){
> >      t1!(void function(D)).writeln();
> >      readln();
> >      return 0;
> > }
> >
> > this code prints 1. on dmd and gdc but on ldc it prints 2.
> >
> > Which one is correct?
> 
> 1. is correct. LDC will presumably print 1. as well as soon as it is updated to a more recent frontend version.

OK, thanks