http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48760
--- Comment #17 from joseph at codesourcery dot com <joseph at codesourcery dot com> 2011-04-26 15:03:49 UTC --- As far as I can see, the main (only?) use of imaginary types is for this issue of constructing complex values. In addition, you need to define for each target the ABI for argument passing and return of imaginary types (and in particular how _Imaginary float is passed in variable arguments - it is *not* promoted to _Imaginary double, whereas float is promoted to double in variable arguments at the C language level before the ABI comes into play, so whereas targets don't need to allow for unpromoted float in variable arguments they do need to allow for unpromoted _Imaginary float). But, given that, it would indeed be nice to support imaginary types.