Differing return type for virtual functions
A virtual function's return type should be the same type that is in base class, or covariant. But why do we have this restriction? Because of the nonsense that would ensue: struct foo { virtual int get() const { return 0; } }; struct bar : foo { std::string get() const { return "this certainly isn't an int"; } }; int main() { bar b; foo* f = &b; int result = f->get(); // int, right? ...right? } It isn't sensible to have a derived class return something completely unrelated. Because how would the code that's using the return value cope with all sorts of unrelated types coming back? e.g.: class