Destroy two assumptions: interface implementation generated by TMP
Baz via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Aug 11 11:21:02 PDT 2014
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'.
More information about the Digitalmars-d-learn
mailing list