multiple inheritance abiguity

Gabriel Dos Reis gdr@cs.tamu.edu
Thu Jan 19 03:20:00 GMT 2006


Rich Johnson <rjohnson@dogstar-interactive.com> writes:

| Hi folks--
| 
| Compiling the following (with no options) produces an ambiguity error:
|  >>file:  bug.cpp  >>>>>>>>>
| struct C1 { void f( double ){}; };
| struct C2 { void f( int ){}; };
| 
| class M : public C1, public C2 {};
| 
| int main()
| {
|    double c1;
|    M m;
|    m.f(c1);
| }
| <<<<<<<<<<<<<<<<<
| The specific error report is:
| $ g++ bug.cpp -o bug
| bug.cpp: In function `int main()':
| bug.cpp:11: error: request for member `f' is ambiguous
| bug.cpp:2: error: candidates are: void C2::f(int)
| bug.cpp:1: error:                 void C1::f(double)
| 
| I've tried both g++(4.0.0 20041026) on Mac OS X 10.4.4, g++(4.0.3
| 20051201) on debian(powerpc) unstable. and   g++-3.3.6 (Debian
| 1:3.3.6-10).  All three report the same error.
| 
| Is the code proper C++?  If not, what am I missing?
| Given that there's there's only one method with a ''void f(double)"
| signature where's the source of the ambiguity?

The program is indeed in error. There are two kinds of ambiguity:
  (1) name lookup ambiguity
  (2) call ambiguity.

Since overload resolution takes place only after name lookup, you
can't expect overload resolution to pick C1::f, when you're already in
trouble with (1).

-- Gaby



More information about the Gcc-help mailing list