Rich Johnson <rjohnson@xxxxxxxxxxxxxxxxxxxxxxx> 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