template<in-matrix InMat, class Triangle, class DiagonalStorage, in-vector InVec,
out-vector OutVec>
void triangular_matrix_vector_product(InMat A, Triangle t, DiagonalStorage d, InVec x, OutVec y);
template<class ExecutionPolicy,
in-matrix InMat, class Triangle, class DiagonalStorage, in-vector InVec,
out-vector OutVec>
void triangular_matrix_vector_product(ExecutionPolicy&& exec,
InMat A, Triangle t, DiagonalStorage d, InVec x, OutVec y);
template<in-matrix InMat, class Triangle, class DiagonalStorage, inout-vector InOutVec>
void triangular_matrix_vector_product(InMat A, Triangle t, DiagonalStorage d, InOutVec y);
template<class ExecutionPolicy,
in-matrix InMat, class Triangle, class DiagonalStorage, inout-vector InOutVec>
void triangular_matrix_vector_product(ExecutionPolicy&& exec,
InMat A, Triangle t, DiagonalStorage d, InOutVec y);
template<in-matrix InMat, class Triangle, class DiagonalStorage,
in-vector InVec1, in-vector InVec2, out-vector OutVec>
void triangular_matrix_vector_product(InMat A, Triangle t, DiagonalStorage d,
InVec1 x, InVec2 y, OutVec z);
template<class ExecutionPolicy, in-matrix InMat, class Triangle, class DiagonalStorage,
in-vector InVec1, in-vector InVec2, out-vector OutVec>
void triangular_matrix_vector_product(ExecutionPolicy&& exec,
InMat A, Triangle t, DiagonalStorage d,
InVec1 x, InVec2 y, OutVec z);