どっちにしろ
template<typename It, typename Fn> Fn for_each(It first, It last, Fn&& Func);
と変えればすべて解決