43 template<
typename ExprL,
typename ExprR>
46 outer_prod( ExprL l, ExprR r ) -> decltype( l * trans( r ) )
48 return l * trans( r );
58 template<
typename ExprL,
typename ExprR>
61 inner_prod( ExprL l, ExprR r ) -> decltype( trace( trans( l ) * r ) )
63 return trace( trans( l ) * r );
73 template<
typename ExprL,
typename ExprR>
76 dot( ExprL l, ExprR r ) -> decltype( trans( l ) * r )
78 return trans( l ) * r;
88 template<
typename ExprL,
typename ExprR>
91 ddot( ExprL l, ExprR r ) -> decltype( trace( trans( l ) * r ) )
93 return trace( trans( l ) * r );
103 template<
typename ExprT>
106 norm2( ExprT v ) -> decltype( sqrt( inner_prod( v, v ) ) )
108 return sqrt( inner_prod( v, v ) );