The right and left parameters would be of type LeftOp and RightOp and those are of type Matrix. You can see this by looking at the template code in the listing. Here are two snippets :
template< typename T, size_t n, size_t m, typename LeftOp, typename RightOp>
class EtMatrixAdd
{
public:
EtMatrixAdd(const LeftOp& lhs, const RightOp& rhs) :
m_lhs(lhs), m_rhs(rhs) {}
T ElementAt(size_t n, size_t m) const
{
return m_lhs.ElementAt(n, m) + m_rhs.ElementAt(n, m);
}
private:
const LeftOp& m_lhs;
const RightOp& m_rhs;
};
and
template<typename T, size_t n, size_t m>
inline EtMatrixAdd<T, n, m, Matrix<T, n, m>, Matrix<T, n, m> >
operator + ( const Matrix<T, n, m>& lhs, const Matrix<T, n, m>& rhs )
{
return EtMatrixAdd<T, n, m, Matrix<T, n, m>, Matrix<T, n, m>>( lhs, rhs );
}
As you can see in the second snippet, both are of type :
Matrix<T, n, m>;
Where, T is the type of data the matrix holds and n and m are indexes of the items in the matrix that will be added. Look at the first page of the article for examples of declaring the matrix.