I don't think this is a good idea.  Because it is virtual, it is like encouraging subclasses to define equality on an object with no obvious way to define equality.  I think operator overloading should only be used if it is at least somewhat obvious what operation is occuring OR all subclasses will naturally want to have the same kind of thing happening in their equality overloads; neither of which seems to be the case here.  If the example functionality you have in `TrivialConverter::operator==` is useful, then consider just making it a regular method like `TrivialConverter::ResTypeEq(Converter<T>& other);`