Подскажите почему это не компилируется
#include <iostream>
using namespace std;
class Logger
{
public:
int logger()
{ return 5; }
virtual void logger(int)
{ ; }
virtual ~Logger(){}
};
template <typename T>
class Base: public Logger
{
public:
virtual void logger(int)
{ ; }
virtual ~Base(){}
};
class Derived: public Base<int>
{
public:
void f()
{
logger(logger());
}
};
int main() {
Derived d;
d.f();
}
../src/overload_fin_template.cpp:40:23: ошибка: нет подходящей функции для вызова «Derived::logger()»
../src/overload_fin_template.cpp:40:23: замечание: candidate is:
../src/overload_fin_template.cpp:29:18: замечание: void Base<T>::logger(int) [with T = int]
../src/overload_fin_template.cpp:29:18: замечание: candidate expects 1 argument, 0 provided
make: *** [src/overload_fin_template.o] Ошибка 1
Если в Base убрать перезрузку метода virtual void logger(int) то все как бы работает (собстно как и ожидалось).
Выжно, что
int logger()
{ return 5; }
virtual void logger(int)
{ ; }