Boost LA

boost/la/matrix_traits.hpp

#include <boost/la/matrix_traits.hpp>

namespace
boost
    {
    namespace
    la
        {
        template <class T>
        struct
        is_matrix
            {
            static bool const value=/*unspecified*/;
            };        
        
        template <class M>
        struct
        matrix_traits
            {
            /*main template members unspecified*/
            };
        
        /*
        User-defined (partial) specializations:
        
        template <>
        struct
        matrix_traits< Matrix >
            {
            static int const rows = /*user-defined*/;        
            static int const cols = /*user-defined*/;        
            typedef /*user-defined*/ scalar_type;        
        
            template <int R,int C> static inline scalar_type r( Matrix const & m );        
            template <int R,int C> static inline scalar_type & w( Matrix & m );        
        
            static inline scalar_type ir( int r, int c, Matrix const & m );        
            static inline scalar_type & iw( int r, int c, Matrix & m );        
            };
        */
        }
    }

See also: is_matrix | matrix_traits