Hidden By The Derived

What does this print?

#include <iostream>

struct Base {
    virtual void f(int)    { std::cout << "Base::f(int) "; }
    virtual void f(double) { std::cout << "Base::f(double) "; }
};

struct Derived : Base {
    void f(double) override { std::cout << "Derived::f(double) "; }
};

int main() {
    Derived d;
    Base& b = d;
    b.f(1);
    d.f(1);
}
A

It does not compile: Derived::f(double) has a different parameter list from Base::f(int), so the override specifier is ill-formed.

B

Base::f(int) Derived::f(double)

C

Base::f(int) Base::f(int)

D

Derived::f(double) Derived::f(double)