Что здесь происходит - почему это не скомпилировано?Компилятор не может найти метод базового класса ADL
#include <iostream>
class Base {
void print(double d) {
std::cout << "Base: " << d << std::endl;
}
};
class Derived : public Base {
void print(std::string const & str) {
std::cout << "Derived: " << str << std::endl;
}
};
int main(int argc, char* argv[]) {
Derived d;
d.print(2.);
d.print("junk");
}
(Ошибки в обоих MinGW и VC11 с чем-то эквивалентным No conversion from double to std::string
.)
Если изменить имя функции печати в Derived
, он успешно компилируется, так ясно Derived::print(string const &)
маскирует Base::print(double)
каким-то образом. Но у меня создалось впечатление, что подпись функции включала тип (ы) аргумента, и поэтому эта маскировка должна происходить здесь. Это неверно в случае методов базового класса?
Это не имеет никакого отношения к ADL, что совсем другое. –