CRTP use case

What is the primary purpose of the Curiously Recurring Template Pattern (CRTP)?

template<typename Derived>
struct Base {
    void interface() {
        static_cast<Derived*>(this)->implementation();
    }
};
A

Enabling multiple inheritance safely

B

Runtime polymorphism without vtables

C

Static (compile-time) polymorphism without vtable overhead

D

Enforcing abstract interfaces at compile time