複雑な場合はmplの出番になるんじゃないかな

mpl::if_< ...,
mpl::if_< ...,

> >::type::call();