比較
import std.c.stdio; template Hige(){ void hige(){ hoge(); } } class Hoge{ void hoge(){ printf("hoge\n"); } mixin Hige; } void main(){ Hoge h = new Hoge(); h.hige(); }
これは通る。
hoge
そしてこっちは駄目。
template Foo(){ int[] map(int delegate(int) dg){ int[] tary; each( (int i){ tary ~= dg(i); } ); // コメントアウトするとエラー消える return tary; } } class Hoge{ void each(void delegate(int) dg){ for (int i = 0; i < 5; i++){ dg(i); } } mixin Foo; } void main(){ Hoge h = new Hoge(); int[] ary = h.map( (int i){ return i * i; } ); }
Assertion failure: 'next' on line 2226 in file 'mtype.c' abnormal program termination
mtype.cはTypeの定義とか。2226行目はTypeFunctionのsyntaxCopyという関数で、nextというのはType(TypeFunctionのスーパークラス)のメンバ変数。Type型のポインタ。
正直コードでかすぎてよくわからない。うーん。