Document: WG14 N1463
    
      
       Submitter: Fred J. Tydeman (USA)
       Submission Date: 2010-05-10
       Related documents: N1431
       Subject: Type punning example
    
Problem: "type punning" is mentioned in a footnote. It seems to me that the idea needs to be fleshed out with an example.
Proposal.
Add the following example to 6.5.2.3 Structure and union members
EXAMPLE nn: A non-static complex object may be created from two real values via type punning:
      
#include  <math.h>
  union fc2 {           /* 6.5.2.3, paragraph 3, type punning */
    float f[2];         /* 6.2.5, paragraph 13, layout of complex */
    float _Complex fc;
  };
  float _Complex fc0 = (union fc2){INFINITY, NAN}.fc;
  float _Complex fc1 = (union fc2){.f[0] = -0.f, .f[1] = 1.f}.fc;
    defines and initializes fc0 with the value /math infinity symbol/ + iNAN, fc1 with the value -0.f + i, Note: This usage does not allow for static initialization.
Add to the rationale in the section on unions:
Unions may be used to do type punning. That is, to reinterpret an object representation as a new type. This is different than a conversion to a new type.