¿Cómo declaro un operador sobrecargado en una clase abstracta y lo sobrescribo en una clase derivada no abstracta?

Estoy tratando de escribir una clase abstracta con algunos operadores binarios virtuales puros, que deberían ser implementados por la clase derivada para lograr el polimorfismo del operador. Aquí hay un ejemplo simplificado:

class Base {
public:
    virtual const Base& operator+ (const Base&) const = 0;
};

class Derived : public Base {
public:
    const Derived& operator+ (const Derived&) const;
};

const Derived& Derived::operator+ (const Derived& rvalue) const {
    return Derived();
}

Ahora mismo no importa lo que haga el operador, lo importante es lo que devuelve: devuelve un objeto Derivado temporal o una referencia a él. Ahora, si intento compilar, obtengo esto:

test.cpp: In member function ‘virtual const Derived& Derived::operator+(const Derived&) const’:
test.cpp:12:17: error: cannot allocate an object of abstract type ‘Derived’
test.cpp:6:7: note:   because the following virtual functions are pure within ‘Derived’:
test.cpp:3:22: note:    virtual const Base& Base::operator+(const Base&) const

Que pasa ¿No se está anulando el operador + (la única función virtual pura en la Base)? ¿Por qué debería ser derivado también abstracto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta