http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56862
--- Comment #1 from Paolo Carlini <paolo.carlini at oracle dot com> 2013-04-07 08:18:18 UTC --- I think everything is working by design, both in the compiler and in the library (which is very simple in this area). This is enough to show the issue (all the compiler I have around behave the same): struct complex { complex(const double& = double(), const double& = double()); }; struct number { operator complex() const { return 0; } operator int(); //OK if this line is commented out }; int main() { number b; complex cb(b); //error: call of overloaded 'complex(number&)' is ambiguous }