Следующий код компилируется и запускается, и никакие предупреждения не выдаются ни gcc, ни clang:
#include <iostream>
struct Base {
virtual ~Base() = default;
virtual std::string const& get() = 0;
};
struct Derived: Base {
virtual std::string& get() override { return m; }
std::string m;
};
int main()
{
Derived d;
d.get() = "Hello, World";
Base& b = d;
std::cout << b.get() << "\n";
}
Является ли std::string&
ковариантным с std::string const&
, то?