delegateの不思議

void hoge(void delegate() dg){
    int delegate() dd = cast(int delegate())dg;
    TypeInfo ti = typeid(typeof(dg));
    TypeInfo tt = typeid(typeof(dd));
    if (ti == tt){
        printf("hoge\n");
    }
    if (ti == typeid(int delegate())){
        printf("hige\n");
    }
    if (tt == typeid(void delegate())){
        printf("huge\n");
    }
    if (ti.tsize == tt.tsize){
        printf("hage\n");
    }
}
void main(){
    hoge(printf("hoge\n"));
}
hoge
hige
huge
hage

中身が同じなら何返そうと、少なくともTypeInfoは同じなのか…
どうにかしてvoid delegate()からもとの型調べられないのかなあ。