Excepción de herencia múltiple.

Tengo el problema de mezclar excepciones y herencia múltiple. Básicamente tengo este código:

#include <exception>
#include <stdexcept>
#include <iostream>

class A : public std::exception
{
public:
    virtual ~A() noexcept {};
};

class B : public A, public std::runtime_error
{
public:
    B() : A{}, std::runtime_error{""}
    {

    }
};

int main()
{
    try {
        throw B{};
    } catch (const std::exception& error) {
        // this catch doesn't work
        std::clog << "Caught!" << std::endl;
    }
}

Lo que necesito es modificarlo para que la excepción de la clase B pueda capturarse como std :: exception (por ahora se llama al controlador de terminación). ¿Cómo puedo lograr tal comportamiento? Supongo que la herencia virtual es necesaria pero no veo ninguna forma de usarla en este caso.

ACTUALIZACIÓN: Necesito poder:
- atrapar A como A (trivial),
- captura A como estándar :: excepción,
- captura B como B (otra vez, trivial),
- captura B como std :: excepción,
- captura B como std :: runtime_error

Sé que esto es un montón de requisitos, y tal vez no tenga mucho sentido, pero lo necesito y tengo curiosidad :)

ACTUALIZACIÓN2: Creo que el problema es que std :: runtime_error no se desvía virtualmente de std :: exception (lo que me permitiría resolver el problema por herencia virtual en A). Estoy en lo cierto? Aún así, ¿se puede resolver?

ACTUALIZACIÓN 3: Alan Stokes sugirió una solución en los comentarios a continuación, que parece funcionar para mí:

¿Se puede dividir A en dos clases: una que implementa la funcionalidad que B necesita y otra que agrega la herencia de std :: exception? Entonces, tanto A como B podrían heredar de (por ejemplo) A_base.

Gracias por eso, aún si alguien tiene otras buenas soluciones, por favor hágamelo saber.

Respuestas a la pregunta(1)

Su respuesta a la pregunta