Sobrecarga de resolução / ambiguidade na pesquisa de nome (qual)

$ 7.3.3 / 14 (C ++ 03)

struct A { int x(); };
struct B : A { };
struct C : A {
   using A::x;
   int x(int);
};
struct D : B, C {
   using C::x;
   int x(double);
};
int f(D* d) {
   return d->x(); // ambiguous: B::x or C::x
}

O comentário no código em 'f' indica que se pode esperar ambiguidade entre 'B :: x' ou 'C :: x'.

No entanto, ao compilar com g ++ (ideone) ou Comeau, os erros são ligeiramente diferentes. Esses erros, em vez de indicar ambiguidade em B :: x ou C :: x indicam o fato de que A é uma base ambígua de D

prog.cpp: na função 'int f (D *)': prog.cpp: 16: erro: 'A' é uma base ambígua de 'D'

E

"ComeauTest.c", linha 21: erro: classe base "A" é retorno ambíguo d-> x (); // ambíguo: B :: x ou C :: x

Seguindo as regras de pesquisa de nome em US $ 10,2, sinto que o comentário no snippet de código não está realmente correto. De fato, o erro está principalmente relacionado à ambiguidade da classe base 'A' e não a qualquer outra coisa (por exemplo, ambiguidade na resolução de sobrecarga). Alguma ideia?