Странное поведение при вызове виртуальных функций

Я не понимаю, что не так с этим кодом. Это похоже на невероятную ловушку!

Этот код:

class Foo
{
  public:
      virtual double foo(double x) const = 0;
              double foo(int x) const { return (double)(x + x); }
};

class Bar : public Foo
{
    public:
        virtual double foo(double x) const { return x * x; }
};

int main()
{
    Bar* b = new Bar;
    Foo* f = b;
    std::cout << b->foo(3) << " " << f->foo(3) << std::endl;
    std::cout << b->foo(5.0) << " " << f->foo(5.0) << std::endl;
    return 0;
}

печатает следующий вывод:

9 6
25 25

Я делаю вывод, чтоBar::foo(double) const вызывается с неявным приведением, когда тип указателяBar*, Нопочему такое возможно без предупреждения?

Я работаю с GCC 4.7.2. Я скомпилировал сg++ -Wall foobar.cpp -o foobar.exe

Ответы на вопрос(3)

Ваш ответ на вопрос