virtual override overload operator template generic type cast convert parse