This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: C99 _Complex and C++ complex<> interoperability.
- From: Gabriel Dos Reis <gdr at cs dot tamu dot edu>
- To: "Smith-Rowland, Edward M" <ESmith-rowland at alionscience dot com>
- Cc: <libstdc++ at gcc dot gnu dot org>
- Date: 25 Feb 2007 19:22:23 -0600
- Subject: Re: C99 _Complex and C++ complex<> interoperability.
- References: <893D428105AB9F49AC7A5C96A454A8B81BE7C8@email4a.alionscience.com>
"Smith-Rowland, Edward M" <ESmith-rowland@alionscience.com> writes:
| All,
|
| This message is probably a combination of C++ standards (OT), gcc
| implementation, and gcc-help so apologies in advance.
|
| In discussions on the GSL mailing list about special functions and other
| numerical issues, complaints about the lack of interoperability of C++
| complex and C99 complex came up. I'm trying to hunt down information on
| these issues.
|
| I have noticed that it is possible (since 4.0) to construct and assign
| from a C99 complex number to a C++ complex number.
|
| I think this is very cool. This goes part way towards reconciling C99
| and C++ as far as complex numbers are concerned.
|
| I don't see this in the C++ standard or under g++ extensions in the
| manual.
It is not in the ISO C++ standard. It is purely a libstdc++
implementation detail. However, I've taken deliberately chosen to
make ISO C++ std::complex<> and ISO C _Complex interoperate where
possible. It is therefore a GCC extension that I'm not willing to
formally document at this moment because there are other issues that
are resolved yet and that might change in the future.
| My questions are:
| Is this behavior standard or is this a gcc extension?
| If this is a gcc extension where is it documented?
|
| Also, if this behavior is nonstandard is anyone thinking about
| standardizing it?
I don't see howw standardize something ISO C++ consciously chosed to
ignore. Certainly, I'm not going to champion it.
| Finally, the circle would be complete if we could assign from
| std::complex to _Complex.
| Any ideas?
You can cast a std::complex<T> to a T _Complex*. Yes, it is ugly.
But it is a guarantee.
-- Gaby