Classe de modelo de herança múltipla

class messageA {
};

class messageB {
};

template<class T>
class queue {
public:
    virtual ~queue() {}
    void submit(T& x) {}
};

class A : public queue<messageA>, public queue<messageB>
{
};

int main()
{
    A aa;
    aa.submit(messageA());
    aa.submit(messageB());
}

Meu primeiro pensamento é que o código acima deve estar correto, pois a classe A contém 2 funções de envio sobrecarregadas, que aceitam os objetos messageA e messageB.

No entanto, o compilador me fornece o seguinte erro:

Posso saber por que há uma ambígua? Não é óbvio que, para a primeira chamada de envio, desejo chamar messageA version? Para a segunda chamada de envio, desejo chamar a versão messageB?

------ Build started: Project: main, Configuration: Release Win32 ------
Compiling...
main.cpp
.\main.cpp(21) : error C2385: ambiguous access of 'submit'
        could be the 'submit' in base 'queue<messageA>'
        or could be the 'submit' in base 'queue<messageB>'
.\main.cpp(21) : error C3861: 'submit': identifier not found
.\main.cpp(22) : error C2385: ambiguous access of 'submit'
        could be the 'submit' in base 'queue<messageA>'
        or could be the 'submit' in base 'queue<messageB>'
.\main.cpp(22) : error C2664: 'queue<T>::submit' : cannot convert parameter 1 from 'messageB' to 'messageA &'
        with
        [
            T=messageA
        ]
.\main.cpp(22) : error C3861: 'submit': identifier not found

questionAnswers(2)

yourAnswerToTheQuestion