template<typename It, typename Fn> Fn for_each(It first, It last, Fn Func);
というシグネチャを
template<typename It, typename Fn> void for_each(It first, It last, Fn&& Func);
に変えるんじゃダメなん?