N4701 Editors' Report -- Programming Languages -- C++

Richard Smith (editor) (Google Inc)
Dawn Perchik (co-editor) (Embarcadero Technologies Inc)
Thomas Köppe (co-editor) (Google DeepMind)


Special thanks to Jens Maurer, Jonathan Wakely, and Eelis van der Weegen for performing many of the editorial fixes since N4687.

Thanks to all those who have submitted editorial issues and to those who have provided pull requests with fixes.

New papers

Motions incorporated into working draft

This revision contains only editorial changes relative to N4687.

Notable editorial changes

Changes in the style of specification

Drafting for future standard changes should take the above into account.

Lists of figures and tables

At the request of ISO, the lists of figures and tables have been removed from the document.


At the request of ISO, the paper size used for the working draft has been switched to A4.

Courtesy of Jens Maurer, we now automatically attempt to avoid page breaks in undesirable places: immediately after section headings, and between the declaration and description of standard library elements. We also provide page break hints at the end of declarations and on blank lines in code blocks. Many thanks to Jens; this will substantially reduce the effort required to finalize the C++20 IS. Please file an file an editorial issues if you find any bad page breaks in the working draft.

Filesystem Terms and Definitions

Per the ISO Directives, the filesystem wording is not entitled to its own Terms and Definitions section. The corresponding terms have been converted to use our normal style of an italicized definition, the definitions have been incorporated into the relevant portion of the running text, and the [fs.definitions] subclause has been removed.

Minor editorial fixes

A log of editorial fixes made to the working draft since N4687 is below. This list excludes changes that do not affect the body text or only affect whitespace or typeface. For a complete list including such changes (or for the actual deltas applied by these changes), consult the draft sources on github.

commit e3a5f29e3dbd60089a6371e5f16d5d507c429ea3
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Oct 16 16:19:56 2017 -0700

    [util.smartptr.shared.cmp] Fix overfull hbox.
    [unique.ptr.special] Adjust to match changes to [util.smartptr.shared.cmp]
    [tuple.cnstr] Adjust wording to avoid awkward linebreak within code

commit d1ba29b57990161cbbcdbb3faf60aa9b67cc3274
Author: Akira Takahashi <faithandbrave@gmail.com>
Date:   Tue Oct 17 01:29:14 2017 +0900

    [util.smartptr.shared.cmp] Add "typename" for dependent name (#1770)

commit dbb1ea97f1cb57cab275ba4eec9def4b3daab97e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Oct 16 16:20:06 2017 +0200

    [unord.map.overview], [unord.multimap.overview] Use iter_val_t instead of iter_value_t (#1772)

commit b07fd6c53e0d5841b513192ebe08c047f3d05df4
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Apr 20 21:41:52 2017 +0200

    Use 'well-formed' (with hyphen) consistently.

    Fixes #1618.

commit af40423574aa8e3a495b382840a258f94cb6349d
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Mon Jul 10 18:23:47 2017 +0100

    [stringbuf.virtuals] Rephrase DR 453 resolution for seekoff

    This avoids the requirement to compare newoff to zero when the value of
    newoff hasn't been determined.

commit d6a3234838da05d460366c83d8ec524f42ea37a4
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Oct 6 22:29:52 2017 +0200

    [thread.condition.condvarany] Remove note made incorrect by LWG 2135.

    Fixes #1755.

commit dead61f32a2ed040745b668640924520d7b64c71
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Fri Oct 13 20:28:20 2017 +0100

    [fs.filesystem.syn] fix ordering of exists and equivalent

commit ac3ed314239fccf81cece3cf7aeabdced03e5032
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Oct 13 23:30:00 2017 +0200

    [class.virtual] Correct function names in example comments.

    Fixes #1740.

commit 0059794f5370697d647bf31cc434cf306ba08554
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Oct 10 12:23:17 2017 -0700

    Front matter: remove "Contents" entry from itself. Remove list of tables
    and list of figures. Reorder cross-reference bullets in "Terms and

    As requested by ISO Central Secretariat.

commit 8b767974c25346ea4d8990ebe315ab8dfa45a3b9
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Oct 6 21:52:12 2017 +0200

    [mem.res.private] Remove misleading 'typical' in note.

    Fixes #1698.

commit 4a5ff4e7f947da6130a25900443317c18e879acf
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Oct 3 13:41:04 2017 +0100

    [time] Fix namespace for definitions in std::chrono

    The previous commit ad767d39f1a0667470ded0e5eb3155fcdd55f465 accidentally added the wrong namespace "std" instead of "std::chrono".

commit 72647e7b03472315794872a10dfe2f2b74a2fa74
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Oct 3 10:22:55 2017 +0100

    [mem.res] Fix namespace for definitions in std::pmr

    The previous commit ad767d39f1a0667470ded0e5eb3155fcdd55f465 accidentally added the wrong namespace "std" instead of "std::pmr".

commit eb035cf60c50ef8ad7d74ffdd5c2140f4179769a
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Oct 3 01:01:53 2017 +0100

    [memory.syn, unique.ptr] Add explanatory comments to make_unique overloads similar to the ones for make_shared, and mild presentational cleanup

commit ad767d39f1a0667470ded0e5eb3155fcdd55f465
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Oct 3 00:18:23 2017 +0100

    [utilities] Add missing "namespace std" to some class definitions

commit b888c3d0cbe078475562f2b4d5f45e1528e61c6e
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Oct 3 00:08:23 2017 +0100

    [containers] Remove repeated statement of relational operator declarations (#1759)

commit 1c43bc8685335048cd30042a712c0b40ff7f890a
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Oct 2 22:55:20 2017 +0100

    [unique.ptr, util.smartptr.shared] Remove redundant repetitions of declarations that already appear in the synopsis (#1758)

commit 6d9e8c6237230c1c09d7f265751caf8cd5a1e2dc
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Sep 25 15:58:53 2017 -0700

    [dcl.type.simple] Improve naming of template specialization in example.

commit 97f21603bd6a9a547b98394a85c1cc0f342f7273
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Sep 25 15:45:43 2017 -0700

    Fix '// Error' in examples to use '// error' instead.

commit fa958265bed2a99d6d9787705297dc34c749017a
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Sep 25 23:45:52 2017 +0100

    [thread.req.timing] Use mathematical symbols

commit 10c90ef815f10a800a3119476dc637c288c7c312
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Sep 25 23:31:58 2017 +0100

    [thread] Harmonize presentation of synopses and declarations

commit 9680eb724be8802b9823b234f0f5cad88a2efde9
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Sep 25 11:49:13 2017 -0700

    [ios.members.static] Fix case of first letter in footnotes.

commit 6a7b14ae0b0f74f3ee27f0ad1354920acc830558
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Sep 25 09:32:47 2017 -0700

    [string.assign] Add missing "Returns:".

commit 9177b4b733b7fe8d121647d5638040c1d059370e
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Sep 18 13:44:55 2017 +0100

    [allocator.requirements] Fix footnote within Table 31 and table placement

commit b6268620ee5cf87e4416f58e8f37995618b6495c
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue Aug 15 13:34:46 2017 +0100

    [futures.async] remove parens from DECAY_COPY()

commit 64c8b273fb401b845a851fc0361766943959d6d7
Author: timsong-cpp <rs2740@gmail.com>
Date:   Sat Aug 12 01:03:02 2017 -0400

    [diff.cpp14.library] Add Annex C entry for new headers in C++17

    Fixes #1700.

commit 1a9b8ebecd1c4e2da29329be5d7bda696c8cfbed
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Sep 12 11:53:46 2017 -0700

    Convert "must"s in normative wording that do not indicate logical
    necessity to a different form.

    Normative requirements use "shall". Advice to users uses "should".
    Description of the behavior of the implementation that does not of
    itself constitute a requirement uses the imperative mood.

    Fixes ISO 21 (C++17 DIS)

commit 6218c216178655ece30733a0ec8043af9a65bf2e
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu Sep 14 14:45:56 2017 -0700

    Replace "this International Standard" with "this document" when
    referring to the document as a body of text.

    Cases where that phrasing is used to compare this standard to other
    revisions of the C++ standard retain this phrasing for clarity.

    Fixes ISO 20 (C++17 DIS)

commit 132326619d234a2b62819fd3a2cba6d9c654be23
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu Sep 14 14:00:40 2017 -0700

    [support.start.term] Remove note that is not justified by normative

    Fixes NB JP 7 (C++17 DIS)

commit 577968dc4de4674333510aea1d0e7da38c9e3bb6
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Sep 11 16:51:59 2017 -0700

    [temp.over.link] Change leading letter in comments in example to lowercase.

    Fixes NB JP 6 (C++17 DIS)

commit 081894151eb9b8f628168af9fffc38b0cbd0f6cf
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Sep 11 16:45:15 2017 -0700

    [over.match.funcs] Remove the number of overload resolution contexts
    from the introductory text.

    It has become out of date relative to the actual number, and listing a
    number here is not useful.

    Fixes NB JP 5 (C++17 DIS)

commit 6b0c8352738bce937d5aa633aacb4cd3c3285acc
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Sep 7 21:58:28 2017 +0100

    [intro.defs, definitions, fs.definitions] change notes in Terms and Definitions to say "Note X to entry"

    Fixes ISO 3 (C++17 DIS)

commit fa49082e030985ebdf3ecc91ece5cbdf72421338
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Sep 11 16:30:12 2017 -0700

    [fs] Integrate file system terms and definitions into the text at appropriate places.

    Update xrefs to point to the relevant definitions.

    Update index entries for constraint normalization to harmonize with
    those for path normalization.

commit 60453da3081d8fa5753f48d2c78e1e78b1a3b079
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Sep 11 11:40:41 2017 -0700

    [fs.definitions] Replace "Terms and definitions" formatting with inline definitions.

    These definitions do not satisfy ISO rules for a "Terms and definitions"
    section, and in any case it does not make sense for FS to have its own
    "Terms and definitions". Following our usual convention, we use inline
    definitions for locally-scoped terms.

commit 5619b65614eae10510f337a1eacd05fc4308fe5c
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu Sep 7 14:40:23 2017 -0700

    Update [intro.defs] and [definitions] to use (roughly) substitutable
    phrases as definitions.

    In particular, such phrases should not begin with an article. However,
    for definitions of adjectives, a noun phrase is still used, because the
    English language is not compatible with ISO's requirements.

commit a31fa795274e9fbb676b3ef2a8e60df12eb516b0
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Sep 11 16:36:49 2017 -0700

    [intro.refs] Remove redundant reference to C11 Technical Corrigendum 1.

    When making a normative reference to another document, all relevant
    Technical Corrigenda are assumed and need not be listed explicitly.

    Fixes ISO 1 (C++17 DIS)

commit 1a4e554f910cdd1df3d2d8a62c2270dd1219eddc
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Sep 7 20:02:06 2017 +0100

    [any.cons] fix tag typename; "in_place<T>" should be "in_place_type<T>"

    Fixes NB JP 10 (C++17 DIS)

commit 788b07ba87458c35228ecbdccb2e9dfac37eebf8
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Sep 7 19:18:13 2017 +0100

    [algorithms.parallel.user] remove stray full stop

    Fixes NB JP 12 (C++17 DIS)

commit d0b014a78818c0c1cc4c7b2e96f1264990d06478
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Sep 7 19:09:32 2017 +0100

    [support.general, depr.cpp.headers] remove index entries for now-deprecated headers and symbols, and add missing index entries for deprecated headers.

    Fixes NB JP 23 (C++17 DIS)

commit d9075c89a2539d5b3038c1a15b02673fe18589c3
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Thu Sep 7 11:55:36 2017 +0100

    [alg.reverse] remove duplicated Requires: element

    Fixes NB JP 14 (C++17 DIS)

commit 27331fd3a2c8b3b78223712d56bbd51be1c9159b
Author: Eelis van der Weegen <eelis@eelis.net>
Date:   Sat Aug 12 18:14:44 2017 +0200

    Consistently place footnote mark after sentence full stop, not before it.

commit be5c14cf44a6e6ea7348e65dbf99e3a8152c28ac
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Aug 9 15:59:11 2017 -0700

    [expr.prim.req.compound] Adjust description in example to be easier to understand.

commit c57ffb959dc939979111a4d1bcc31b71da643511
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Fri Aug 4 18:33:41 2017 +0100

    [temp.deduct] Split long paragraph 8

commit e3b4927ea0f4e8c8bf1f7461226c729b4e2c00be
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Aug 1 22:06:30 2017 +0100

    [memory.syn, util.smartptr.shared] Add missing {make,allocate}_shared declarations to synopsis

    We list those functions in two places: the main synopsis in [memory.syn], and also a smaller subset in [util.smartptr.shared] just for shared_ptr.

    Also contains some minor presentational improvements for both instances.

    Fixes #1697.

commit 355a20beb12ba9c26cb09d41159f7f68238dab7d
Author: timsong-cpp <rs2740@gmail.com>
Date:   Tue Aug 1 04:14:14 2017 -0400

    [defns.well.formed] remove full stop