Re: Union C++ standard

David Brown <>
Mon, 29 Nov 2021 21:00:06 +0100

          From comp.compilers

Related articles
[2 earlier articles]
Re: Union C++ standard (gah4) (2021-11-26)
Re: Union C++ standard (David Brown) (2021-11-27)
Re: Union C++ standard (Derek Jones) (2021-11-28)
Re: Union C++ standard (David Brown) (2021-11-28)
Re: Union C++ standard (Derek Jones) (2021-11-29)
Re: Union C++ standard (Kaz Kylheku) (2021-11-29)
Re: Union C++ standard (David Brown) (2021-11-29)
Re: Union C++ standard (Keith Thompson) (2021-11-29)
Re: Union C++ standard (Derek Jones) (2021-11-30)
Re: Union C++ standard (George Neuner) (2021-11-30)
Re: Union C++ standard (David Brown) (2021-11-30)
Re: Union C++ standard terminology (Derek Jones) (2021-12-01)
| List of all articles for this month |

From: David Brown <>
Newsgroups: comp.compilers
Date: Mon, 29 Nov 2021 21:00:06 +0100
Organization: A noiseless patient Spider
References: 21-11-004 21-11-008 21-11-009 21-11-010 21-11-011
Injection-Info:; posting-host=""; logging-data="42763"; mail-complaints-to=""
Keywords: C, standards
Posted-Date: 29 Nov 2021 16:50:48 EST
In-Reply-To: 21-11-011
Content-Language: en-GB

On 29/11/2021 01:09, Derek Jones wrote:
> David,
>>>> In C, type-punning via unions is allowed (i.e., fully defined behaviour
>>> That is not true.  Writing into one member and then reading from
>>> another member is undefined behavior.
>> No, it is correct.  It would be helpful if you looked at the full
> You have misunderstood the C conformance model, which revolves around
> the use of "shall" and "shall not", and the kind of section in which
> they appear (e.g., Constraints).  See:
> For a longer discussion see:

I was not aware of your qualifications when I posted earlier - you have
been directly involved in things that I can only infer from reading the
standards and other material.

Let me put it this way. Those of us who read the C standards, but were
not involved in writing them, do our best to interpret the precise
meaning of the words in the normative text. Those meanings are not
always clear. When we see examples or footnotes, we know they were
added by the same people that wrote the standard, and are used as
clarification for the meaning of the normative text. The footnote
(added, as you say, in a C99 TC in response to a defect report - and
therefore AIUI as much part of C99 standard as the original published
text since the TC's replace previous versions) makes it perfectly clear
that type-punning via unions is defined behaviour in C. This codifies
the existing practice supported by most (if not all) C compilers, and
relied upon by code.

Since the change was a clarifying footnote, not a change to the
normative text, the implication is that the normative text was always
intended to support these semantics. The only three alternatives I see
to that is that the footnote was added by some committee members who
disagreed with what other committee members wrote in the normative text,
that the committee changed their minds about union semantics but did not
change the normative text, or that the footnote was deliberately added
to confuse people. None of these alternatives is appealing.

If my reasoning here is faulty, I'd be grateful if you could point out
the flaw.


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.