return outerProduct(l.elem(),r.elem());
typename BinaryReturn<ILattice<T1,N>, ILattice<T2,N>, FnOuterProduct>::Type_t  d;  for(int i=0; i < N; ++i) d.elem(i) = outerProduct(l.elem(i), r.elem(i)); return d;
outerProduct(const IScalar<T1>& l, const IScalar<T2>& r){  return outerProduct(l.elem(),r.elem());}