typename BinaryReturn<PMatrix<T1,N,C>, PMatrix<T2,N,C>, FnTraceMultiply>::Type_t  d;
typename BinaryReturn<PScalar<T1>, PMatrix<T2,N,C>, FnTraceMultiply>::Type_t  d;
traceMultiply(const PMatrix<T1,N,C>& l, const PMatrix<T2,N,C>& r){  typename BinaryReturn<PMatrix<T1,N,C>, PMatrix<T2,N,C>, FnTraceMultiply>::Type_t  d;  d.elem() = traceMultiply(l.elem(0,0), r.elem(0,0));  for(int k=1; k < N; ++k)    d.elem() += traceMultiply(l.elem(0,k), r.elem(k,0));  for(int j=1; j < N; ++j)    for(int k=0; k < N; ++k)      d.elem() += traceMultiply(l.elem(j,k), r.elem(k,j));  return d;}