Ставлю некоторые эксперименты.
Хотелось бы со знатоками обсудить, на сколько возможно вот это:
template<class T> class IDivideble
{
public:
template<class U> virtual T& operator/(IDivideble<U>&) = 0;
template<> virtual T& operator/<int>(int) = 0;
template<> virtual T& operator/<double>(double) = 0;
template<> virtual T& operator/<float>(float) = 0;
template<> virtual T& operator/<char>(char) = 0;
virtual ~IDivideble(){}
}