typename BinaryReturn<ILattice<T2,N>, ILattice<T3,N>, FnWhere>::Type_t  d;   for(int i=0; i < N; ++i) d.elem(i) = where(a.elem(i), b.elem(i), c.elem(i));  return d;
return where(a.elem(), b.elem(), c.elem());
where(const ILattice<T1,N>& a, const ILattice<T2,N>& b, const ILattice<T3,N>& c){  typename BinaryReturn<ILattice<T2,N>, ILattice<T3,N>, FnWhere>::Type_t  d;  // Not optimal - want to have where outside assignment  for(int i=0; i < N; ++i)    d.elem(i) = where(a.elem(i), b.elem(i), c.elem(i));  return d;}