KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Suppose I have these abstract classes Foo and Bar : class Foo; class Bar; class Foo { public: virtual Bar* bar() = 0; }; class Bar { public: virtual Foo* foo() = 0; }; Suppose further that I have the derived class ConcreteFoo and ConcreteBar . I want to covariantly refine the return type of the foo() and bar() methods like this: class ConcreteFoo : public Foo { public: ConcreteBar* bar(); }; class ConcreteBar : public Bar { public: ConcreteFoo* foo(); }; This won't compile since our beloved single pass compiler does not know that ConcreteBar will inherit from Bar , and so that ConcreteBar is a perfectly legal covariant return type. Plain forward declaring ConcreteBar does not work, either, since it does not tell the compiler anything about inheritance. Is this a shortcoming of C++ I'll have to live with or is there actually a way around this dilemma?
Tags (comma-separated)
Save Edits
Cancel