template<class Xpr, class T, class Reducer>
T fold(Xpr expr, T init, Reducer reducer)
{
#pragma omp parallel
{
T pinit = init;
#pragma omp for nowait
for(int n=1; n<=size; ++n)
pinit = reducer(pinit, run(expr, n) );
#pragma omp atomic
init = reducer(pinit,init);
}
return init;
}