Possible Defect Report: Casts between pointer types and floating-point types.
Consider the code:
int main(void){ long double ld = 1.L; double d = 1.0; float f = 1.f; void * pv; char * pc; pv = (void *)ld; pc = (char *)d; f = (float)pv; d = (double)pc; return 0; }
Question: What is the semantics of casts between pointer types and floating-point types?
6.5.4 Cast operators, in constraints, has:
Unless the type name specifies a void type, the type name shall specify qualified or unqualified scalar type and the operand shall have scalar type.
[So the above code is valid from a syntax standpoint.]
6.3.2.3 Pointers, paragraphs 5 and 6 discusss conversions between pointer types and integer types. [May be undefined, may be trap representation.]
Nowhere can I find any discussion of conversions between pointer types and floating-point types (real, complex, and/or imaginary).
I do not care what the answer is. This case can be made a constraint violation, undefined, unspecifed, implemetation-defined, or treated as if it was converted via some integer type during the process. We should add words to the Rationale on why this case was done as it is.