CRTP, недоступный метод базового класса
От: niXman Ниоткуда  
Дата: 08.10.19 09:46
Оценка:
привет!

есть такой код:
template<typename D>
struct crtp {
    void cwd() {}
};

struct type: crtp<type> {
    //void cwd(int) {}
};

int main()
{
    type t;
    t.cwd();
}

если раскомментить закомментированную строку, получим ошибку:
prog.cc:16:11: error: no matching function for call to 'type::cwd()'
   16 |     t.cwd();
      |           ^
prog.cc:10:10: note: candidate: 'void type::cwd(int)'
   10 |     void cwd(int) {}
      |          ^~~
prog.cc:10:10: note:   candidate expects 1 argument, 0 provided

почему так? почему компилятор не видит вариант метода из базового класса, если я определяю перегрузку с другой сигнатурой в наследнике?

спасибо!
Слово "совпадение" появилось после падения сов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.