Hi, I try to get why the last way of generating an interface implementation fails. I've put assumptions: is it right ?
-------------------------------
module itfgen;

import std.stdio;

interface itf{
    void a_int(int p);
    void a_uint(uint p);
}

template genimpl(T){
    char[] genimpl(){
        char[] result;
result = "void a_" ~ T.stringof ~ "("~ T.stringof ~ " p){}".dup;
        return result;
    }
}

class impl: itf{
    mixin(genimpl!int);
    mixin(genimpl!uint);
}

// OK because: mixin is at the source code level, begining of the ana
class impl2: itf{
    static char[] genimplint(T)(){
        char[] result;
result = "void a_" ~ T.stringof ~ "("~ T.stringof ~ " p){}".dup;
        return result;
    }
    mixin(genimplint!int);
    mixin(genimplint!uint);
}

// FAILS because: alias are probably generated after the itf check
class impl3: itf{
    void tmp(T)(T p){};
    alias a_int = tmp!int;
    alias a_uint = tmp!uint;
}

void main(string args[]){
    auto I1 = new impl;
    auto I2 = new impl2;
    auto I3 = new impl3;
}
-------------------------------

I get

'Error: class itfgen.impl3 interface function 'void a_int(int p)' is not implemented'.


Reply via email to