#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 );
}
}