Static Type Picks The Default

#include <iostream>

struct Base {
    Base() { render(); }
    virtual void render(int depth = 1) const { std::cout << "Base:" << depth << " "; }
    virtual ~Base() = default;
};

struct Derived : Base {
    void render(int depth = 9) const override { std::cout << "Derived:" << depth << " "; }
};

int main() {
    Derived d;
    Base& b = d;
    b.render();
    d.render();
}

What does this print?

A

Base:1 Base:1 Derived:9

B

Base:1 Derived:1 Derived:9

C

Derived:9 Derived:1 Derived:9

D

Base:1 Derived:9 Derived:9