Возможно ли что-то подобное?
// We can even assume T and U are native C++ types
template<typename T, typename U>
magically_deduce_return_type_of(T * U) my_mul() { return T * U; }
Или кому-то придется взломать структуру return_type и специализировать ее для каждой пары собственных типов?