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.