Why doesn't this work in D2?

Simen kjaeraas simen.kjaras at gmail.com
Sun Jun 27 10:26:52 PDT 2010


Jacob Carlborg <doob at me.com> wrote:

> Why doesn't the following code work in D2 (it works in D1)?
>
> void foo (T) (in T[] a, T b)
> {
> 	
> }
>
> void main ()
> {
> 	"asd".foo('s');
> }
>
> The error I get is:
>
> main.d(10): Error: template main.foo(T) does not match any function  
> template declaration
> main.d(10): Error: template main.foo(T) cannot deduce template function  
> from argument types !()(string,char)
>
> It seems to be some problem with the "b" argument, if I change that to  
> "char" it works.

In D2, strings are of type immutable(char)[], so your T would be
immutable(char). However, 's' is a simple, unadorned char.

Ways to fix this would include:

void foo(T)(const T[] a, const T b){
...
}

void foo(T,U)(const T[] a, U b) if (is(Unqual!T == Unqual!U)) {
...
}

-- 
Simen


More information about the Digitalmars-d-learn mailing list