値を返すifを書きたい!

満足のいく形で書けませんでした。
例えばこんな風な場合、

if_(condition()).then_(
    statement1(),
    statement2(),
    statement3()
);

then_()はstatement3()の型が知りたいわけです。
普通はここで関数テンプレートを使うわけですが、構造体やクラスのメンバ関数は関数テンプレートを使えない…
勿論、メンバ関数に拘らずに下のようにしてもいいのですが、

if_(condition(), then_(
    statements
));

非常にダサイので個人的にとても厭です…
ということで関数テンプレートは使えない。かといって、

void then_(void delegate() dgs){ ... }

などとしてしまうと、当然型の情報は失われてしまうし、

void then_(...){ ... }

などとしてしまうと、普通に式が評価されてdelegate()に変換されなくなってしまう…
複数のdelegateを受け取る方法がなさそうなので、なんともかんとも…
ダサイのを我慢して関数テンプレートを使ったとしても、

void then_(T1)(T1 delegate() t1){ ... }
void then_(T1, T2)(T1 delegate() t1, T2 delegate() t2){ ... }
void then_(T1, T2, T3)(T1 delegate() t1, T2 delegate() t2, T3 delegate() t3){ ... }
...

とかをいっぱい書かないといけなくなる…
最後の式の型だけでいいのに、テンプレートパラメータの衝突が起こるので結局どの式の型もパラメータにしないといけないのがダサい。
elseやelseifによる分岐の数だけ型の情報を覚えておかないといけないし、となるとそれだけまたT1T2T3...を書かないといけないし。
やめたやめた!