Morlan:

> I did not ask what to do to compile it. I knew that 54L would do. The problem 
> is
> that in the example I explicitely specify the template parameter as long* so 
> there
> is no reason for the compiler to try and guess T from the type of the function
> argument. There is something wrong here.

The compiler is not guessing the type here. It's just that the type the 
template is explicitly instantiated with, and the type T of the data, aren't 
the same. You see it better with this simpler example:


import std.stdio;

void foo(T)(T x) if(is(T == int)) {
    writeln("1");
}

void foo(T)(T x) if(!is(T == int)) {
    writeln("2");
}

void main() {
    foo(1); // 1
    foo(1L); // 2
    foo!(int)(1); // 1
    foo!(long)(1L); // 2
    foo!(long)(1); // error
    foo!(int)(1L); // error
}

Bye,
bearophile

Reply via email to