IScalar<typename BinaryReturn<T1, T2, FnLocalInnerProduct>::Type_t>  d;  for(int i=0; i < N; ++i) d.elem(i) = localInnerProduct(s1.elem(i), s2.elem(i));  return d;
return localInnerProduct(s1.elem(), s2.elem());
localInnerProduct(const ILattice<T1,N>& s1, const ILattice<T2,N>& s2){  IScalar<typename BinaryReturn<T1, T2, FnLocalInnerProduct>::Type_t>  d;  for(int i=0; i < N; ++i)    d.elem(i) = localInnerProduct(s1.elem(i), s2.elem(i));  return d;}