October 26, 2022·6 min read·engineeringcc23standards

C23 enters committee draft consultation

National-body consultation shifts C23 work from adding facilities to examining their combined specification. The editor's report identifies the accepted scope and the kinds of defects this review needs to find.

The next stage for C23 is review of a combined document. ISO's project record records committee-draft consultation beginning on October 26, following registration of the draft on October 25. This gives national bodies a formal route to comment on the revision. It does not make the draft a published international standard.

JeanHeyd Meneide's post-July editor's report, N3048, describes the change in working mode. The last meeting for ratifying ordinary C23 additions has finished. Further substantive work needs a national-body comment, apart from serious defects that demand correction. This is a useful boundary because the document contains changes whose interactions extend beyond the individual papers that proposed them.

C's small language remains attractive to me, but its specification has to support a large variety of implementations. A new facility must coexist with existing declarations, library interfaces, and implementation choices. Committee-draft consultation is where reviewers can examine that combined contract through one document instead of treating each successful proposal as an isolated result.

The editor's report establishes the review target

N3048 accompanies N3047, the working draft for committee-draft ballot. The report lists integrated papers, including type inference for object declarations, constexpr object definitions, and nullptr. It also records adoption of preprocessing binary inclusion through #embed.

An integration report answers a different question from meeting minutes. Minutes establish what the committee decided. The editor's report states which decisions have been applied to the draft, with qualifications where necessary. A reviewer needs both kinds of information when a discrepancy appears between a proposal's original text and the combined language wording.

The report's bit-utility entry demonstrates why its qualifications matter. It marks N3022 as partial because endian-aware loads and stores, memory reversal, and rotation functions were excluded from C23. The explanation says this is a scope decision about the adopted work, not an admission that the editor failed to finish integrating accepted portions.

That distinction affects public descriptions of the revision. Listing the complete contents of N3022 as C23 facilities would be wrong even though the proposal appears in the integration list. The report supplies the narrower accepted set. Review should begin from that set instead of assuming a paper title implies adoption of everything beneath it.

Object declarations create connected questions

The integrated declaration work includes underspecified object declarations, type inference, and constexpr for object definitions. Their appearance together matters because each affects how a declaration obtains a type or a value. Reviewing their interactions requires more than confirming that the compiler recognizes individual new keywords.

The July draft minutes record adoption of type inference together with the underspecified-declaration changes. The constexpr motion also incorporates the latter changes. These votes explicitly connect the papers. They provide a reason to examine the integrated declaration rules as related wording.

That does not justify describing C23 as adopting the whole compile-time programming model of another language. The report names constexpr for object definitions. A prior proposal with broader ambitions is not the review target merely because it shares the keyword. The integrated scope determines which declarations the new draft actually specifies.

A useful review consequently asks how the document defines the object, its initialization, and the uses allowed for its value. Those are separate parts of a declaration's contract. An example that parses successfully in an experimental compiler can illustrate the feature, but the standard must describe the rule independently of any one implementation's current behaviour.

My preference is to read such additions through the exact obligations they impose on implementations. A keyword is the visible spelling of the change. The specification of initialization and permitted use determines whether independent implementations can accept the same program with the same meaning.

Preprocessing affects the build's input model

Binary embedding expands the kinds of input a translation can consume. In N3017, the design deliberately places the resource name at the start of the directive so dependency scanners can discover it. The proposal supplies initializer values without requiring a generated source file containing one literal per resource element.

Its interaction with empty input illustrates the level of detail worth reviewing. A resource that contributes no elements changes whether surrounding punctuation is valid. The proposal therefore separates base embedding from optional wording for empty-resource detection and conditional token additions. July's minutes record votes on those pieces individually.

The integrated draft has to present those decisions consistently. A reviewer cannot determine all accepted semantics by taking the first example in an earlier proposal and assuming the rest follows. The point of a combined specification is to state the resulting rules in one place, including behaviour at boundaries that the motivating examples avoid.

The same concern applies to macro work. N3048 identifies N3033 as the integration for comma omission and deletion, including __VA_OPT__ and preprocessing wording improvements. A preprocessing facility operates before the ordinary parser sees the resulting program. Its specification must account for token production and the syntax that consumes those tokens, which are different stages of the translation.

New integer types must fit existing typedefs

The editor's report includes _BitInt fixes as well as bit-precise bit-fields. July's minutes explain some of the constraints attached to that integration. WG14 votes to remove the requirement that the maximum-width integer typedefs hold every value of a bit-precise integer type. It also votes against defining the stdint.h typedefs as bit-precise types for this revision.

Those decisions make compatibility part of the feature's specification. A new family of integer types can affect generic selection and assumptions encoded in library typedefs. Review needs to distinguish the new types themselves from the existing names whose meanings the committee has deliberately constrained.

Enumeration work creates another adjacent area. N3048 lists both improved normal enumerations and enhanced enumerations as integrated papers. Their presence alongside bit-precise changes does not establish that their rules are identical. It establishes that the draft now needs coherent wording for several extensions to the program's type system.

A national-body comment can identify an ambiguity in that combined wording without reopening the entire motivation for either addition. This is a practical advantage of consultation on a document. The unit of review can be a specific rule and its consequences for an actual program, even when the relevant text originated in several papers.

Integration review already found missing material

N3048 reports that floating-point Annex H required substantial correction after integration. The editor thanks reviewers for finding missing functions and says that three pages of declarations had been omitted. Those declarations were then corrected and merged according to the specification. This is direct evidence that approval of a proposal and accurate incorporation of its contents are separate tasks.

The report also lists editorial problems still known to the editor. These include overlaps in Annex A, incorrect section references in annex footers, and duplicate index entries. Such defects differ in technical significance, but they all affect the reader's ability to locate and interpret the intended specification.

This does not imply that every typo warrants a new proposal. The editor explicitly invites spelling, grammar, and other corrections. For a change substantial enough to require a proposal, the report says an existing WG14 national-body member must also file a comment on the committee draft. That gives reviewers a stated route for substantive issues during this stage.

Consultation constrains further development

The procedural boundary is useful for implementers as well as reviewers. A defined set of integrated additions provides a target for experimental support. Remaining changes arise through defect correction and the consultation process, so an implementation claim still needs to identify which draft it follows.

The same boundary keeps public discussion precise. A proposal submitted after the feature work closes does not become part of C23 merely by existing in the document log. It needs the appropriate route through review and committee decision. The integration report explains that route without promising acceptance of every later request.

The October consultation therefore concerns the consistency and adequacy of a particular draft. National bodies can compare its rules with accepted papers, examine interactions through concrete examples, and identify corrections before the document advances. The editor's report supplies the paper-level account needed to trace those examples back to the decisions the draft is meant to contain.