С
struct Base
{
void foo(float a);
};
struct Sub : Base
{
void foo(int a); // Hides Base::Foo
};
Sub::foo
скрывает Base::foo
,
Вы должны добавить using
, чтобы разрешить обе перегрузки.
struct Sub : Base
{
using Base::foo;
void foo(int a);
};
Подробнее о using_declaration
А для вашего звонка:
Sub s;
s.foo(1.5); // Ambiguous with using, Sub::foo(int) without using.
без использования, рассматривается только одна перегрузка, поэтому вызывается Sub::foo(int)
.
При using
учитываются обе перегрузки, но ни одна из них не лучше, чем другая, поэтому она неоднозначна.