Inherit from multiple partial implementations of an abstract base class?
===

Is it possible to have a number of **partial implementations** of an abstract interface, and then **collect** these partial implementations into a **single concrete class** by using multiple inheritence?

I have the following example code:


    #include <iostream>
    
    struct Base
    {
        virtual void F1() = 0;
        virtual void F2() = 0;
    };
    
    struct D1 : Base
    {
        void F1() override { std::cout << __func__ << std::endl; }
    };
    
    struct D2 : Base
    {
        void F2() override { std::cout << __func__ << std::endl; }
    };
    
    // collection of the two partial implementations to form the concrete implementation
    struct Deriv : D1, D2
    {
        using D1::F1; // I added these using clauses when it first didn't compile - they don't help
        using D2::F2;
    };
    
    int main()
    {
        Deriv d;
        return 0;
    }

This fails to compile with the following errors:

    main.cpp: In function ‘int main()’:
    main.cpp:27:11: error: cannot declare variable ‘d’ to be of abstract type ‘Deriv’
    main.cpp:19:8: note:   because the following virtual functions are pure within ‘Deriv’:
    main.cpp:5:18: note: 	virtual void Base::F1()
    main.cpp:6:18: note: 	virtual void Base::F2()