template<class T1, class T2> \
struct promote<tensor##_basic<T1>, undeterminated_basic<T2> > { \
typedef
tensor##_basic<typename promote<T1,T2>::type> type; \
}; \
template<class T1, class T2> \
struct promote<undeterminated_basic<T1>,
tensor##_basic<T2> > { \
typedef
tensor##_basic<typename promote<T1,T2>::type> type; \
}; \
template<class T1, class T2> \
struct promote<tensor##_basic<T1>,
tensor##_basic<T2> > { \
typedef
tensor##_basic<typename promote<T1,T2>::type> type; \
};
see the tensor page for the full documentation