https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99664
Bug ID: 99664
Summary: Overriding virtual function with different return type
(and not covariant) is allowed to compiled, when it
shouldn’t be
Product: gcc
Version: 10.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ricardojvsilva10 at gmail dot com
Target Milestone: ---
Test sammple code:
struct Res { };
struct A {
virtual Res &&foo() &&;
};
struct B : A {
Res &foo() && override; // allowed to compile by gcc, not by clang and MSVC
};
In the previous test case, overriding virtual function A::foo with different
return type and not covariant from 'A::foo' is allowed and is succefully
compiled, when it shouldn’t be.
- Test sample: https://godbolt.org/z/1E98j9
- Relevant standard entry [class.virtual] 11.7.3 - 7.1
https://timsong-cpp.github.io/cppwp/class.virtual#7.1