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