template void parallel_for_each(Iterator first,Iterator last,Func f) { unsigned long const length=std::distance(first,last); if(!length) return; unsigned long const min_per_thread=25; if(length<(2*min_per_thread)) { std::for_each(first,last,f); } else { Iterator const mid_point=first+length/2; std::future first_half= std::async(¶llel_for_each, first,mid_point,f); parallel_for_each(mid_point,last,f); first_half.get(); } }