itfi limitation or bug on my part?

Don nospam at nospam.com
Sat Aug 7 12:42:03 PDT 2010


Brad Roberts wrote:
> module test;
> 
> void main()
> {
>     int[] foos;
>     func1(foos);
> }
> 
> void func1(T)(const T[] foos)
> {
>     T afoo;
>     func2(foos, afoo);
> }
> 
> void func2(T)(const T[] foos, out T afoo)
> {
> }
> 
> $ dmd -c test.d
> test.d(12): Error: template test.func2(T) does not match any function template
> declaration
> test.d(12): Error: template test.func2(T) cannot deduce template function from
> argument types !()(const(int[]),int)
> test.d(6): Error: template instance test.func1!(int) error instantiating
> 
> Ignore style.. this is a massively reduced case from a much more complex block
> of code.
> 

Looks like a compiler bug. If you change func2 to this:

void func2(T, U)(const T[] foos, out U afoo)
{
    static assert(is(T==U));
}

test0.d(212): Error: static assert  (is(const(int) == int)) is false
test0.d(207):        instantiated from here: func2!(const(int),int)
test0.d(201):        instantiated from here: func1!(int)

T should be "const(int)" instead of "int".


More information about the Digitalmars-d-learn mailing list