llvm / llvm/llvm-project

differing return type in overriden function not diagnosed

Open
#200,756 3 comments 0 reactions 0 assignees View on GitHub
clang:diagnostics question
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.