differing return type in overriden function not diagnosed
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
```cpp
class Base
{
public:
virtual ~Base() = default;
class Data {};
virtual const Data* d() const = 0;
virtual const char* c() const = 0;
};
class C : public Base
{
Data* d() const override; // not diagnosed
char* c() const override; // diagnosed
};
extern void func();
void func()
{
C c;
}
```
GCC
```
:13:11: warning: invalid covariant return type for 'virtual char* C::c() const'
13 | char* c() const override; // diagnosed
| ^
:7:25: note: overridden function is 'virtual const char* Base::c() const'
7 | virtual const char* c() const = 0;
| ^
```
Clang
```
:13:11: error: virtual function 'c' has a different return type ('char *') than the function it overrides (which has return type 'const char *')
13 | char* c() const override; // diagnosed
| ~~~~~ ^
:7:25: note: overridden virtual function is here
7 | virtual const char* c() const = 0;
| ~~~~~ ^
```
https://godbolt.org/z/W9b3x8KfW
Neither GCC nor Clang report the differing return type for `d()`.
Contributor guide
Assessment
This issue has not been assessed yet.