内包表記的な何か続き

一時変数を予め宣言しなくても良いcompが出来ました。_!(T)を使います…

void* placeholder;
T _(T)(){
    return *(cast(T*)placeholder);
}

U[] comp(T, U)(T ary, lazy U dg){
    U[] ret;
    foreach (val; ary){
        placeholder = &val;
        ret ~= dg;
    }
    return ret;
}

void main(){
    int x;
    int[] ary = [1, 2, 3, 4, 5];
    foreach(v; ary.comp(_!(int)*_!(int))){
        writefln(v);
    }
}

ダサいだけなら兎も角、かなり怪しいです。ネストさせたら使えないし。キャスト使ってる時点でどうかという説もあります。
暗黙の型変換がない以上は諦めるしかないのでした。まあこの辺は言語の限界だと思います…