Boost LA

Binary Matrix,Matrix Operations

#include <boost/la/matrix_mul_matrix.hpp> 
#include <boost/la/matrix_mul_eq_matrix.hpp> 
#include <boost/la/matrix_plus_matrix.hpp> 
#include <boost/la/matrix_minus_matrix.hpp> 
#include <boost/la/matrix_plus_eq_matrix.hpp> 
#include <boost/la/matrix_minus_eq_matrix.hpp> 
#include <boost/la/matrix_eq_matrix.hpp> 
#include <boost/la/matrix_neq_matrix.hpp>

namespace
boost
    {
    namespace
    la
        {
        //*** Binary matrix,matrix operations ***
        
        //Only enabled if:
        //  is_matrix<A>::value && is_matrix<B>::value &&
        //  matrix_traits<A>::cols==matrix_traits<B>::rows
        template <class A,class B>
        typename deduce_matrix2<A,B,matrix_traits<A>::rows,matrix_traits<B>::cols>::type
        operator*( A const & a, B const & b );        
        
        //Only enabled if:
        //  is_matrix<A>::value && is_matrix<B>::value &&
        //  matrix_traits<A>::rows==matrix_traits<A>::cols &&
        //  matrix_traits<A>::rows==matrix_traits<B>::rows &&
        //  matrix_traits<A>::cols==matrix_traits<B>::cols
        template <class A,class B>
        A &
        operator*=( A & a, B const & b );        
        
        //Only enabled if:
        //  is_matrix<A>::value && is_matrix<B>::value &&
        //  matrix_traits<A>::rows==matrix_traits<B>::rows &&
        //  matrix_traits<A>::cols==matrix_traits<B>::cols
        template <class A,class B>
        typename deduce_matrix2<A,B,matrix_traits<A>::rows,matrix_traits<A>::cols>::type
        operator+( A const & a, B const & b );        
        
        //Only enabled if:
        //  is_matrix<A>::value && is_matrix<B>::value &&
        //  matrix_traits<A>::rows==matrix_traits<B>::rows &&
        //  matrix_traits<A>::cols==matrix_traits<B>::cols
        template <class A,class B>
        typename deduce_matrix2<A,B,matrix_traits<A>::rows,matrix_traits<A>::cols>::type
        operator-( A const & a, B const & b );        
        
        //Only enabled if:
        //  is_matrix<A>::value && is_matrix<B>::value &&
        //  matrix_traits<A>::rows==matrix_traits<B>::rows &&
        //  matrix_traits<A>::cols==matrix_traits<B>::cols
        template <class A,class B>
        A &
        operator+=( A & a, B const & b );        
        
        //Only enabled if:
        //  is_matrix<A>::value && is_matrix<B>::value &&
        //  matrix_traits<A>::rows==matrix_traits<B>::rows &&
        //  matrix_traits<A>::cols==matrix_traits<B>::cols
        template <class A,class B>
        A &
        operator-=( A & a, B const & b );        
        
        //Only enabled if:
        //  is_matrix<A>::value && is_matrix<B>::value &&
        //  matrix_traits<A>::rows==matrix_traits<B>::rows &&
        //  matrix_traits<A>::cols==matrix_traits<B>::cols
        template <class A,class B>
        bool
        operator==( A const & a, B const & b );        
        
        //Only enabled if:
        //  is_matrix<A>::value && is_matrix<B>::value &&
        //  matrix_traits<A>::rows==matrix_traits<B>::rows &&
        //  matrix_traits<A>::cols==matrix_traits<B>::cols
        template <class A,class B>
        bool
        operator!=( A const & a, B const & b );
        }
    }

See also: Boost LA | Synopsis