------- Comment #7 from mmitchel at gcc dot gnu dot org 2007-07-07 22:21 ------- I've attached a patch which fixes this bug in an obvious way.
Since complex types are arithmetic types in GNU C++, we should allow standard conversions to them from integers, just as we do for all other arithmetic types. However, this runs into problems with libstdc++. In particular, std::complex<double> has a constructor from double and also a constructor from __complex__ double. Making the change in this patch makes that conversion ambiguous because now "std::complex<double>(1)" can go via either the "__complex__ double" constructor or the plain "double" constructor. I'm pretty sure that we did indeed discuss this at some point in the past, although I couldn't find a link and I don't remember what we decided, if anything. The easiest way to fix this is probably to add more constructors to std::complex<double> to match all of the arithmetic types directly, e.g., add "std::complex<double>::complex(int, int = 0)". Then, that will be the best match. I think we need input from the libstdc++ maintainers before trying to do anything in the front end. Paolo? -- mmitchel at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pcarlini at suse dot de Status|ASSIGNED |WAITING http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31780