Solving triangular systems

If M is a triangular matrix (upper or lower) and X a vector containing the right hand side, the following procedures solve the system \(x \leftarrow M^{-1}x\). The vector X contains the result:

gmm::upper_tri_solve(M, X, false) // Solving an upper triangular system
gmm::upper_tri_solve(M, X, true)  // Solving an upper triangular system
                                  // assuming there is 1 on the diagonal
gmm::lower_tri_solve(M, X, false) // Solving a lower triangular system
gmm::lower_tri_solve(M, X, true)  // Solving a lower triangular system
                                  // assuming there is 1 on the diagonal

components which are lower the diagonal are ignored by gmm::upper_tri_solve and components which are upper the diagonal are ignored by gmm::lower_tri_solve.