diff --git a/include/boost/numeric/ublas/triangular.hpp b/include/boost/numeric/ublas/triangular.hpp index 244b4ec7..aca4cab6 100644 --- a/include/boost/numeric/ublas/triangular.hpp +++ b/include/boost/numeric/ublas/triangular.hpp @@ -884,6 +884,7 @@ namespace boost { namespace numeric { namespace ublas { template const typename triangular_matrix::value_type triangular_matrix::one_ (1); + // TODO These traits overloads seem to do no more then generic defition template struct vector_temporary_traits< triangular_matrix > { typedef typename triangular_matrix::vector_temporary_type type ; @@ -921,6 +922,7 @@ namespace boost { namespace numeric { namespace ublas { typename M::closure_type>::type matrix_closure_type; typedef const self_type const_closure_type; typedef self_type closure_type; + // Replaced by _temporary_traits to avoid type requirements on M //typedef typename M::vector_temporary_type vector_temporary_type; //typedef typename M::matrix_temporary_type matrix_temporary_type; typedef typename storage_restrict_traits const typename triangular_adaptor::value_type triangular_adaptor::one_ (1); - template - struct matrix_vector_solve_traits { - typedef typename promote_traits::promote_type promote_type; - typedef vector result_type; - }; - template struct vector_temporary_traits< triangular_adaptor > : vector_temporary_traits< typename boost::remove_const::type > {} ; @@ -1768,6 +1764,13 @@ namespace boost { namespace numeric { namespace ublas { struct matrix_temporary_traits< triangular_adaptor > : matrix_temporary_traits< typename boost::remove_const::type > {}; + + template + struct matrix_vector_solve_traits { + typedef typename promote_traits::promote_type promote_type; + typedef vector result_type; + }; + // Operations: // n * (n - 1) / 2 + n = n * (n + 1) / 2 multiplications, // n * (n - 1) / 2 additions