再帰回数がそんなに大きくならないとわかっている関数があったとして(例えば多くても100回)
下のように書いたら関数ポインタを使わずにinline展開してもらえるかな?

template <unsigned int N> inline void func_impl(...)
{
if(再帰するなら) func<N + 1>func_impl(...); else // ...
}

template <> inline void func_impl<100>(...)
{
assert(false);
}

inline void func(...)
{
func<0>(...);
}

int main(void) { func(...); return 0; }