あ、デフォルト引数からの型推論じゃなくて、普通のオーバーロードならいいのか。

template<typename T, typename U> foo(const T& t, boost::type<U>) { }
template<typename T> inline foo(const T& t) { foo(t, boost::type<int>()); }