In C++11, you can use the alternative function declaration syntax:
#include <utility> // for declval
template<class T, class U, class V>
auto operator*(const T a, const matrix<U> A)
-> decltype( std::declval<T>() * std::declval<U>() )
{
//...
}