I have a Base
class that provide some business logic and virtual methods, that can be further overridden. Additionally I want to extend some classes inheriting from Base
with Decorator
. Here's simplified setup:
struct Base
{
~Base() = default;
virtual void foo(int) {};
virtual void foo(double) {};
};
template<typename T>
struct Decorator : public T
{
};
struct Middle : public Decorator<Base>
{
virtual void foo(int) override {};
};
struct Final : public Middle
{
virtual void foo(double) override {};
};
When I compile code with clang and -Wall -Wextra I get following warning:
21 : <source>:21:18: warning: 'Final::foo' hides overloaded virtual function [-Woverloaded-virtual]
virtual void foo(double) override {};
^
16 : <source>:16:18: note: hidden overloaded virtual function 'Middle::foo' declared here: type mismatch at 1st parameter ('int' vs 'double')
virtual void foo(int) override {};
^
GCC doesn't complain and to be honest I don't know what clang finds wrong here.
I run recent recent clang and GCC using Compiler Explorer: https://godbolt.org/g/fC5XXT