I am experimenting with covariance and came up with the following example that does at least not compile with clang 11 and on VS2015:
class Number {
public:
virtual ~Number () = default;
virtual Number const * increment()const = 0;
};
class Even;
class Odd : public Number {
public:
// error: increment() is not covariant because Even is incomplete
Even const * increment()const;
};
class Even : public Number {
public:
Odd const * increment()const;
};
It is related to Covariant return types, const-ness, and incomplete classes but not a duplicate because the constness is the same in both overwritten functions.
Is that even supported by the standard?
Is there a way to get around this problem or any suggestions to achieve a similar behavior?