Boost LA

boost/la/vector_traits.hpp

#include <boost/la/vector_traits.hpp>

namespace
boost
    {
    namespace
    la
        {
        template <class T>
        struct
        is_vector
            {
            static bool const value=/*unspecified*/;
            };        
        
        template <class V>
        struct
        vector_traits
            {
            /*main template members unspecified*/
            };
        
        /*
        User-defined (partial) specializations:
        
        template <>
        struct
        vector_traits< Vector >
            {
            static int const dim = /*user-defined*/;        
            typedef /*user-defined*/ scalar_type;        
        
            template <int I> static inline scalar_type r( Vector const & v );        
            template <int I> static inline scalar_type & w( Vector & v );        
        
            static inline scalar_type ir( int i, Vector const & v );        
            static inline scalar_type & iw( int i, Vector & v );        
            };
        */
        }
    }

See also: is_vector | vector_traits