//#(execute) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/Gxh4edc8n
using std::vector;
struct B {};
struct D : public B {};
struct Base1 {
virtual B& func();
};
struct Derived1 : public Base1 {
virtual D& func() override; // D& ist kovariant
};
struct Base2 {
virtual B& func();
};
struct Derived2 : public Base2 {
virtual D func() override; // (ERR) D ist nicht kovariant
};
struct Base3 {
virtual vector<B> func();
};
struct Derived3 : public Base3 {
virtual vector<D>& func() override; // (ERR) vector<D>& ist nicht kovariant
};
struct Base4 {
virtual vector<B*>& func();
};
struct Derived4 : public Base4 {
virtual vector<D*>& func() override; // (ERR) anderer Typ, nicht kovariant
};