ので作ってみた。ようはC言語の匿名unionだわな。
色々言語的制限があるのがきつい。
import std.stdio; struct MultiType(TL...){ union{ TL tl; } U opCast(U)(){ foreach(int i,T;TL)static if(is(U:T))return tl[i]; assert(0); } static MultiType!(TL)* opCall(U)(U val){ auto multiType = new MultiType!(TL); foreach(int i,T;TL)static if(is(U:T))multiType.tl[i]=val; return multiType; } } void main(){ MultiType!(int, char[])* test(bool b){ if(b) return MultiType!(int, char[])(10); return MultiType!(int, char[])("test"); } writefln(test(true).opCast!(int)()); writefln(test(false).opCast!(char[])()); }