diff --git a/papers/.gitattributes b/papers/.gitattributes
new file mode 100644
index 0000000000..0afd26b375
--- /dev/null
+++ b/papers/.gitattributes
@@ -0,0 +1 @@
+*.pdf -diff
diff --git a/papers/n4639.html b/papers/n4639.html
new file mode 100644
index 0000000000..6fb30b381b
--- /dev/null
+++ b/papers/n4639.html
@@ -0,0 +1,1370 @@
+
N4639
+N4639 Editors' Report -- Working Draft, Standard for Programming Language C++
+
+2016-02-06
+Richard Smith (editor) (Google Inc)
+Dawn Perchik (co-editor) (Embarcadero Technologies Inc)
+Thomas Köppe (co-editor) (Google DeepMind)
+<cxxeditor@gmail.com>
+
+Acknowledgements
+
+Special thanks to
+Jens Maurer
+for performing many of the editorial fixes since N4618.
+
+Thanks to all those who have submitted editorial
+issues
+and to those who have provided pull requests with fixes.
+
+New papers
+
+
+- N4639 is this Editors' Report.
+- N4640 is the current working draft. It replaces N4618.
+
+
+Motions incorporated into working draft
+
+This revision contains only editorial changes relative to N4618.
+
+Notable editorial changes
+
+
+Jens Maurer performed a cleanup of the valarray
wording, converting it
+to use the standard formatting style and descriptive elements for library
+wording. Thanks also to Jonathan Wakely and Marshall Clow for verifying
+that this change preserves the normative meaning.
+[alg.partitions] is now nested under [alg.sorting] rather than
+[alg.modifying.operations]. This is a better fit because partition
is a
+partial sort (just like nth_element
is), and is_partitioned
is not a
+mutating sequecne operation.
+
+
+Minor editorial fixes
+
+A log of editorial fixes made since N4618 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 f77a2b27e9e68eacedb23d675d2d257125f3a7e7
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Feb 6 19:54:31 2017 +0100
+
+ Define 'object type' only once. (#1268)
+
+ There were only a few references to the definition in
+ 1.8 [intro.object], so drop that definition and refer
+ to 'type of an object' instead.
+
+ Fixes #511.
+
+commit fec48d5db12705f1fcec4be6a9ceb3a067c305cd
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Mon Feb 6 03:09:41 2017 +0100
+
+ [valarray.access] 'evaluates as' -> 'evaluates to'. (#1337)
+
+commit b79c41937b0150569e1428d1093d9504762f15dd
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Feb 6 02:02:39 2017 +0100
+
+ [numarray] Add standard description elements. (#1215)
+
+ Partially addresses #1071.
+
+commit 1f8ab13005ff2820d4044c6707a1dabfebce2c1b
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Feb 6 02:01:59 2017 +0100
+
+ [dcl.init.aggr] Add example for array of unknown bound (#1270)
+
+ * Consistently refer to 'array of unknown bound'
+ not 'array of unknown size'; see [dcl.array].
+
+ * [dcl.init.aggr] Add example for array of unknown bound
+ as non-static data member.
+
+ Addresses core issue 1985.
+
+ Fixes #396.
+
+commit ec9f102dec2e4624750f01cdebc6f7132361edaa
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sun Feb 5 17:39:12 2017 +0000
+
+ [cinttypes.syn] Add missing 'the', capitalize sentence
+
+commit e23a5df2f8819c88b87e3392d6522b747481e381
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sun Feb 5 17:13:46 2017 +0000
+
+ [iostream.format] Minor rewording to be more accurate and fit the lines better
+
+commit 1a0dd180eb3ea3af05cdf1f573eb6f69b0f1b152
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sun Feb 5 14:51:08 2017 +0000
+
+ Format "i^th" consistently.
+
+ Fixes #653, see also #974.
+
+commit 24900a40ed833ccebb1f3760efe366e4ba73109a
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sun Feb 5 14:26:33 2017 +0000
+
+ [cpp] Swap "control-line" and "if-section".
+
+ With the increased vertical grammar spacing, it is expedient to put the presentation of "control-line" onto the first page so as not to require a huge gap.
+
+commit 4935ed404aa4819e63c560aa2104dbfa70d18f40
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sun Feb 5 13:09:48 2017 +0000
+
+ [ratio.{syn,comparison}] Mild reformatting for consistency.
+
+ Fixes #1402.
+
+commit 50353bd3bb69d770d00e2fb9236bc913994b96c7
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sun Feb 5 13:03:56 2017 +0000
+
+ [associative.set.syn] Fix cross-reference link for 'multiset'
+
+ Fixes #1424.
+
+commit 766792134b9edb507c569ead9745d12c56735115
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sun Feb 5 12:20:50 2017 +0000
+
+ [algorithms.parallel] Add missing \pnum
+
+ Fixes #1432.
+
+commit e88d2343b441b399673aa934de766323c68353f5
+Author: Marshall Clow <marshall@idio.com>
+Date: Sat Feb 4 20:48:13 2017 -0800
+
+ [string.view.template] Change the `reference`, `pointer` etc typedefs in `string_view` to use `value_type` rather than `charT` (#1416)
+
+ This is a cut down version of https://github.com/cplusplus/draft/pull/141, to ensure that it is editorial
+
+commit 04fa63d98ac28457ea038b75fa05f49d14d8ab5b
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sun Feb 5 05:12:58 2017 +0100
+
+ Use 'base class subobject', not 'base subobject' (#1382)
+
+ Fixes #1379.
+
+commit 2de42d5a857886ee1200990ce40f7d8e61eb2293
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sun Feb 5 04:07:38 2017 +0000
+
+ [func.bind.is{bind,place}] Don't begin sentences with code.
+
+commit 7b704e1759cb09b65c0443c9f63b4773b153d000
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Sun Feb 5 04:46:40 2017 +0100
+
+ Capitalize examples where appropriate. (#1356)
+
+commit 1e00bc3e8addc7b263ecbc7b2f5a510c904b876c
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sun Feb 5 04:45:13 2017 +0100
+
+ [class.temporary] Use 'Clause~\ref{class.access}' (#1348)
+
+ Fixes #1347.
+
+commit 73b2294ca033dee878d678d5c79adc62e352559e
+Author: Billy O'Neal <billy.oneal@gmail.com>
+Date: Sat Feb 4 19:44:16 2017 -0800
+
+ [atomics.syn] Don't describe function template overloads as "partial specializations"
+
+commit 41c6bac2314892f1b51b0ef4d22fd7aedb9562a5
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Sun Feb 5 04:43:14 2017 +0100
+
+ [string.io] Don't refer to sentry by name it was not given. (#1333)
+
+commit 4408f4667327fffa4e527995a1b73f674e459927
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sun Feb 5 04:42:14 2017 +0100
+
+ [lib] Replace pre: and post: in requirements tables (#1284)
+
+ with \requires and \postcondition, respectively.
+
+ Also replace yields: with \returns and effect: with \effects.
+
+ Fixes #1281.
+
+commit cf2241bd976a3759a1a036e239471ceda48fb06c
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Sun Feb 5 04:38:27 2017 +0100
+
+ [conv.lval] Split off description of conversion result into dedicated paragraph. (#1318)
+
+commit a665fddad337ac8316695c06730a59e2051eaa5d
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sun Feb 5 04:36:14 2017 +0100
+
+ Harmonize formatting of 'main' function. (#1308)
+
+ Consistently use \tcode{main}.
+ Add cross-references to [basic.start.main].
+
+ Fixes #1304.
+
+commit 6841997d7c36b2a4c14d638de00c1804d018c844
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Sun Feb 5 04:34:59 2017 +0100
+
+ [expr] Split off definition of 'composite pointer type' into dedicated paragraph. (#1300)
+
+commit 7fcb601a9ee72dd45f7df8001c23b9f7cb8b0aca
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Sun Feb 5 04:33:04 2017 +0100
+
+ [strings] Remove remarks that repeat what was stated a few lines before. (#1289)
+
+commit bc106e5f01563337b4069998c6e149b795b65111
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sun Feb 5 03:31:13 2017 +0000
+
+ [tuple.creation] Simplify the introductory notation, and then use notation that matches the introduction. (#1251)
+
+commit e5674e1d47bbd87ecd4caefb3f37c4c3cb3551df
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sun Feb 5 04:30:31 2017 +0100
+
+ [func.bind.bind] Reformat to use math-style indexing. (#1285)
+
+ Partially addresses #1139.
+
+commit 9a5c34e6a8c86a93167724aa5061415f1df8a069
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sun Feb 5 03:30:12 2017 +0100
+
+ [stmt.dcl] Clarify footnote about deadlock avoidance. (#1266)
+
+ Fixes #849.
+
+commit 4b0d533134e61f713a877dadbe6df92f64291d6a
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Dec 16 16:25:04 2016 +0100
+
+ [lib] Harmonize casing for 'shall meet the requirements of ... iterator'.
+
+ Also cross-reference the sections, not the tables, for
+ iterator requirements.
+
+ Fixes #696.
+
+commit 03c356f9d764a8230323bf2fdc77495b98032780
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Dec 16 16:17:02 2016 +0100
+
+ [time.point] Fix cross-reference to clock requirements.
+
+commit 55a498202fb5b558cd93635a63ed111931634b0a
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sun Feb 5 02:01:30 2017 +0100
+
+ [lex.literal] Avoid references to plain 'literal' (#1277)
+
+ unless the \grammarterm is intended.
+
+ Fixes #322.
+
+commit 469e9f021fe65774b5845350be3cff4a12d40680
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Feb 4 21:12:04 2017 +0100
+
+ [namespace.udecl] Clarify error in example. (#1254)
+
+commit 26e92b499f7a41c7b65c7e2828a1608021adf695
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Feb 4 21:02:59 2017 +0100
+
+ [temp.deduct] Avoid talking about 'side effect' and 'evaluation' (#1252)
+
+ when discussing template instantiations.
+
+commit 43c20dbebf207d985f8d051d2994ce22108049e4
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Feb 4 20:52:06 2017 +0100
+
+ [alg.partitions] Move entire subclause to [alg.sorting]. (#1245)
+
+ The non-modifying operation is_partitioned doesn't fit into
+ 'mutating sequence operations', and partitioning can be
+ considered a weak sort.
+
+ Fixes #289.
+
+commit 42578d91450b0b563e076151427b6deff4647f6d
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sat Feb 4 19:44:57 2017 +0000
+
+ [macros, styles] Remove minipages from BNF environments and use a custom enumitem list for spacing. (#1170)
+
+ BNF entries are now spaced like normal paragraphs. Individual paragraphs are kept on a single page by setting a high widow penalty.
+
+ It is now immaterial whether multiple nontermdefs are contained in a single bnf environment, or whether each def is in its own environment. Pages can break between elements, not within.
+
+commit 23d739974007c3f827ad2e55da60cb4358681773
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Feb 4 20:19:51 2017 +0100
+
+ [lib] Replace 'Notes:' elements with regular [ Note: ... -- end note] (#1160)
+
+ Remove the \realnotes and \realnote macros.
+ No longer mention 'Notes:' in [structure.specifications].
+
+ Fixes #492.
+
+commit 5a1d430e6c09099ba7e420db733bcf116e8ca868
+Author: Jonathan Wakely <github@kayari.org>
+Date: Sat Feb 4 19:08:19 2017 +0000
+
+ [streambuf.virt.get] use half-open ranges in underflow effects (#1157)
+
+commit a50661aa098dca6cb7b34061e2d30fd541999cd4
+Author: Jonathan Wakely <github@kayari.org>
+Date: Sat Feb 4 19:00:02 2017 +0000
+
+ [locale.time.get] change undefined term "record" to "object" (#1412)
+
+commit 3f0133279c6852aa7e7c20c2b5e97f32d80847a8
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Feb 4 19:59:31 2017 +0100
+
+ [support.types] Properly describe <cstddef> header (#1415)
+
+ After the synopsis for <cstddef>, add a sentence (cloned from cstdlib.syn)
+ that the contents are the same as <stddef.h> except for wchar_t,
+ [support.types.nullptr], and [support.types.layout].
+
+ Fixes #1404.
+
+commit 06c788de055ef33fa8aae1d479b01600c399a86b
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Sat Feb 4 19:51:51 2017 +0100
+
+ Don't parenthesize \refs after 'in'/'of'/'notwithstanding'. (#1420)
+
+commit 0f8ca3d7da39bd290062408ca2b2572c40994e9a
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Sat Feb 4 19:50:25 2017 +0100
+
+ [lex.phases] Remove stray period. (#1421)
+
+commit 25fb80b3521531d71bb45c677ed9eace5b39f7ae
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Fri Feb 3 18:49:37 2017 +0000
+
+ [forwardlist.ops] Add comma
+
+commit 019585eb4da447ff6a41fa766056b4febff08c25
+Author: timsong-cpp <rs2740@gmail.com>
+Date: Wed Feb 1 08:17:03 2017 +0800
+
+ [locale.facet] add missing backslash in \defn (#1418)
+
+commit ed8dbf4c0bce4adf96307c1d427dde0685f7dbdf
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Mon Jan 30 13:43:20 2017 +0100
+
+ [dcl.enum] Italicize 'unscoped enumeration' in its definition. (#1410)
+
+commit c7f6a9139872aad48a944d018ce5e4b3de15ce81
+Author: Axel Naumann <github@axel-naumann.de>
+Date: Thu Jan 26 17:04:41 2017 +0100
+
+ [thread.lock.algorithm] Change '0-based' to 'zero-based'.
+
+ Conforming with other occurrences in the standard.
+
+commit b63d68ab7bc08f5e969a5b44b000941e6e82eb2e
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Sun Jan 22 21:26:37 2017 +0100
+
+ [basic.ios.cons] Remove stray semicolon. (#1397)
+
+commit 701df7eac2474300d2b602700a3c32a51ef439a7
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Sun Jan 22 18:35:35 2017 +0100
+
+ Add missing \pnums. (#1396)
+
+commit 5ce8ed130a43ffc17b1d05d349e9568831016891
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Fri Jan 20 17:54:09 2017 +0000
+
+ [special] Add comma.
+
+commit 03c99a1b516a85000456841b061d5b1f17b32e48
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Fri Jan 20 17:52:52 2017 +0000
+
+ [optional.ctor] add missing \pnum
+
+commit 4bbb3ba2e4e7065900c12b97710db3e398c6ee2d
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Fri Jan 20 18:48:20 2017 +0100
+
+ [cpp.pragma.op] Add missing \pnums and remove unwanted paragraph breaks. (#1387)
+
+commit d2263429a07205edf8d2ffcd6d41cfe5d61544f8
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Jan 19 00:17:04 2017 +0100
+
+ [dcl.link] Index implementation-defined behavior. (#1330)
+
+ Fixes #1326.
+
+commit 61c4f655ac96e2eba807f8e13f9adae1405bdf49
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Jan 18 23:24:39 2017 +0100
+
+ [dcl.ambig.res] Describe example ambiguous case more clearly. (#1371)
+
+commit 94c7fdf49d51898a10c846bb0409bf07ba66256c
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Jan 18 23:23:57 2017 +0100
+
+ Consistently use 'this International Standard'. (#1380)
+
+commit 95977f18c0594a12a90ca050ec5f8006b4b7bf53
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Jan 18 22:59:08 2017 +0100
+
+ Add missing hyphen in 'floating-point'. (#1319)
+
+commit 2001a03014df142f5f9a5974c64fc2ff96d4f2cd
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Jan 18 22:47:23 2017 +0100
+
+ 'floating-point something', not 'floating point something' (#1384)
+
+ Adjust occurrences that spanned a line break in the LaTeX
+ source and were therefore missed in commit
+ cd3deb891cee5436a64ff9a8f7bb304a4fcc6c00.
+
+commit c8295e3a928f93cff021d88b7b1532b5a58d5114
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Jan 18 22:45:41 2017 +0100
+
+ [stmt.stmt], [dcl.attr.deprecated] Remove hyphen in 're-declared' (#1381)
+
+ Fixes #1378.
+
+commit 2b0db35833f8ccce30744b46465e609e4b109366
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Jan 18 14:57:38 2017 +0000
+
+ [utilities.general] Update reference to bitset section and add missing \rowsep
+
+commit 417d713d341911e3e366610c85761d246785f02f
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Jan 18 00:33:11 2017 +0000
+
+ [over.match.best, over.ics.rank] Remove premature ends of sentences.
+
+ This addresses a major part of #90.
+
+commit d76a411d35b1ed933cb5d11dc492ab4489cb239e
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Jan 17 23:48:02 2017 +0000
+
+ [over.ics.rank] Replace self-referential reference with 'this subclause'
+
+commit ee154f9dd08d93124455f408f69030862acca9eb
+Author: Alisdair Meredith <public@alisdairm.net>
+Date: Mon Jan 16 07:25:43 2017 -0500
+
+ Fix remaining uses of \Cpp macro (#1366)
+
+ I believe this patch catches the last two places in the current
+ draft that should be using a variant of the \Cpp macros to
+ better render the 'C++' string.
+
+commit 4e6dc965fc2a2f562d8bd62cafe5a1d51745a79d
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Fri Jan 13 14:32:39 2017 +0000
+
+ [re] Move long pieces of code into codeblocks and remove redundant "the result of" from return statements
+
+ This fixes overfull hboxes, see #693.
+
+commit ab8f2c7c0331efbb9713a46d4c940df94a0e48f7
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Jan 10 11:04:16 2017 +0100
+
+ [mem.res.pool], [mem.res.monotonic.buffer] Do not define the otherwise unused term 'owns'. (#1260)
+
+ Fixes #1257.
+
+commit 3acb49d296ba7efdc7542e943262138dc0eb9b74
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Fri Jan 6 19:21:45 2017 +0000
+
+ [string.insert] Change "pos1" to "pos" for overloads taking one position
+
+ Also make argument names in synopsis consistent.
+
+ Fixes #1338
+
+commit 732fd444a33043bce3caf6d6d939f6e81fb56ddd
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Jan 5 13:04:01 2017 +0100
+
+ [rand.adapt.shuf] Show exposition-only members in the order in which initialization is described. (#1332)
+
+ Fixes #1331.
+
+commit b9081cc3d7a314ac336695166e0123cdb1da6623
+Author: Kazutoshi SATODA <k_satoda@f2.dion.ne.jp>
+Date: Wed Jan 4 23:31:49 2017 +0900
+
+ [dcl.init] Fix a typo in definition of const-default-constructible (#1327)
+
+commit 10452d174140fbcf0bfc1fab37dbdbd63913be79
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Jan 4 11:45:00 2017 +0100
+
+ [complex.ops] Don't repeat declaration in "Effects:" element. (#1324)
+
+commit 94c2fbabdc1057d7bc7cdb83d1585d24de3fd146
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Tue Jan 3 18:05:03 2017 +0100
+
+ [re.submatch.op] Remove excessive parentheses in "Returns:" element. (#1323)
+
+commit 3b81b0b9cafacee9d23b47d1a8862a9d0eee6ab7
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Jan 3 16:58:58 2017 +0100
+
+ [sf.cmath] Fix 'where' associations of Greek variable names. (#1317)
+
+ Fixes #1291.
+
+commit 2416d453c28a821076a1046bec1b13d6dd8ee7d7
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Jan 3 16:05:27 2017 +0100
+
+ [util.smartptr.enab] Remove leftover postcondition after P0033R1. (#1314)
+
+ Fixes #1299.
+
+commit 0effa034c24cc78f5128d36327f0d30047531b89
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Jan 3 16:02:08 2017 +0100
+
+ [class.derived] Avoid \pnum inside examples. (#1265)
+
+ Fixes #781.
+
+commit 2163ad27876b6e0423650c71b01646a8daca6cdc
+Author: timsong-cpp <rs2740@gmail.com>
+Date: Tue Jan 3 07:36:29 2017 -0500
+
+ [meta.trans.other] add missing cv for common_type (#1292)
+
+ P0435R1 says 'cv void', but the cv part was dropped.
+
+commit 09e6e6de2e92c33daa53ee1013847df68c99ad52
+Author: alexanderkscott <k878208@mvrht.com>
+Date: Sat Dec 31 14:06:51 2016 +0000
+
+ [iterators, numerics] Replace 'sub-clause' by 'subclause' (#1302)
+
+commit 2168e10fb3608d4ab84190d3d0c8cd5101dc52b9
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Fri Dec 30 16:46:18 2016 +0100
+
+ Capitalize notes that consist of complete sentences. (#1297)
+
+commit 3681e72ce5b8d0f09e15bfb4fef11bd230951cc6
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Dec 21 18:58:54 2016 +0000
+
+ [conv.qual] Consistent notation for indexed types T_1, T_2
+
+commit 3e2b77aed27438f6751ad59ca75fc90bde79993b
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 21 19:55:02 2016 +0100
+
+ Mechanically harmonize indexed types to $\tcode{T}_i$. (#1283)
+
+ Replace \tcode{T}$_i$ and $T_i$ with $\tcode{T}_i$.
+
+commit 0b9f60c4c373e57cda055b7aba64afb674db1fff
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Dec 21 18:14:54 2016 +0100
+
+ [string.view.find] Add missing 'be' (#1282)
+
+commit d49359badc2115b010dcf978d86067f1a2cfb331
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Dec 20 16:47:32 2016 +0100
+
+ [containers] Replace pre: and post: in requirements tables with \requires and \postcondition, respectively. (#1273)
+
+ Fixes #792.
+
+commit 9fe30c8353b264318a1c90d2ce817347e1f6738c
+Author: Casey Carter <Casey@Carter.net>
+Date: Sun Dec 18 15:34:21 2016 -0800
+
+ Fix typos in [mem.poly.allocator.mem]/9.1 and /9.5 (#1269)
+
+ (There is no "T" in scope.)
+
+commit 666886e51092f447e9ecb6f26a2965a8c03da667
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Dec 19 00:31:51 2016 +0100
+
+ [associative.reqmts] Harmonize capitalization. (#1271)
+
+ Older entries seem to start with a lowercase letter and only
+ have a full stop if a second sentence follows. For newer
+ entries (initializer lists, node_handle functions), apply
+ that style, too.
+
+ Fixes #328.
+
+commit a3afbc8daaa557cc0cd1f76e40158032ca6f097f
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Dec 16 15:47:47 2016 +0100
+
+ Avoid \pnum inside examples. (#1262)
+
+ With the exception of [facets.examples].
+
+ Fixes #781.
+
+commit 5d129b232ac55abeb508a8f890d478a45eab5554
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Dec 16 12:43:55 2016 +0100
+
+ [dcl.array], [temp.deduct.type] Split notes spanning numbered paragraphs. (#1261)
+
+ Partially addresses #781.
+
+commit 3750b234c1699d2c7b0f83e2c52fbd65d74c4299
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Dec 15 17:43:32 2016 +0100
+
+ [unique.ptr.single.modifiers] Use 'if and only if' when calling deleter. (#1255)
+
+ Fixes #248.
+
+commit 8e64a085cdcd7c41b3f4d4298933cb52b6572420
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Dec 15 17:42:24 2016 +0100
+
+ [sf.math] Promote parenthesized parts of function names to un-parenthesized. (#1256)
+
+ Fixes #1250.
+
+commit f8904bd946650f240a6af76193f406377e2fb1b7
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Nov 30 19:50:31 2016 +0100
+
+ [support.limits] Rearrange section 'Implementation properties'
+
+ - Change order of subsections.
+ - Remove [limits] and [c.limits] subsection headings.
+ - Move descriptions of numeric_limits members and specializations as
+ subsections under the description of the primary class template.
+ - Add sectioning comments to the <limits> synopsis.
+
+ Fixes #785.
+
+commit 9a6d4c3a14d77eaea17044e3b52942582d65eac8
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Thu Dec 15 00:29:13 2016 +0000
+
+ [forward] Remove mid-example paragraph breaks
+
+commit 7f7e757693b3173d9490e63e28f384fbba7dcd91
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Dec 14 23:49:59 2016 +0000
+
+ Change a few stray headings to sentence case
+
+ Fixes #1200 and #1201.
+
+commit 32026a5b490a8f0b310530425108247694968def
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 21 22:45:55 2016 +0100
+
+ [class.copy] Rephrase rule preferring a move constructor
+ in a throw-expression or a return statement.
+
+ Fixes #712.
+
+commit 19a0c06093e39f5b0a85316f2564312c9e52b129
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Dec 7 20:02:50 2016 +0000
+
+ [temp.class] Reorganize examples into a separate paragraph
+
+commit 64e5cffbef31b7a00175d969fae2cf5f70c27f48
+Author: W-E-Brown <webrown.cpp@gmail.com>
+Date: Wed Dec 14 17:03:23 2016 -0600
+
+ s/(possibly cv-qualified)/\\cv{}~/ and allied changes (#1142)
+
+ Applied across the entire standard.
+
+commit 571a258bd4d59725e1bbbb69febaffb3d3a513ed
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Dec 14 22:55:05 2016 +0000
+
+ [input.output] Add references to inclusions in a synopsis
+
+commit eacf4129776df8481599ec44e0c256590aed1ccb
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sat Dec 10 17:56:41 2016 +0000
+
+ [{ex,in}clusive.scan, transform.{ex,in}clusive.scan]: Rephase 'for each *j' in terms of indexes
+
+ Addresses #693 for this part, but is also clearer.
+
+commit c39761a36fed573e369ccccd81f54ee2c9f69930
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 14 21:13:57 2016 +0100
+
+ [iostream.forward.overview] Promote introductory
+ sentences to normative text.
+
+ Fixes #494.
+
+commit 5f0f4df6ab6dfa566d394da9c4321c1015f63747
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Wed Dec 14 12:21:10 2016 -0800
+
+ [basic.def.odr] Clarify that the "not an odr use" requirement for using
+ an internal linkage constant within an inline function (etc) only
+ applies to odr-uses within that inline function, and not uses elsewhere
+ in the program.
+
+commit 2f3c3b8c3a401fd6d8f081b608db6572be01b7e0
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 14 18:46:51 2016 +0100
+
+ [temp] Add variable templates to the definition of 'template'. (#1225)
+
+ Fixes #593.
+
+commit f32e068898a371b94a27f895f3863a810186e70e
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 14 18:38:09 2016 +0100
+
+ [unord] Use 'key equality predicate' consistently. (#1241)
+
+ Replaces occasional uses of 'key equality function'.
+
+ Fixes #630.
+
+commit b54f2507ffc23c0e573f4637217003b4074c33aa
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Dec 14 18:37:20 2016 +0100
+
+ [strings, algorithms, diff] Replace 'routine' with 'function'. (#1217)
+
+commit 7b087da9cd6867fd6b8b499c6ec766499db48772
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Dec 14 17:58:47 2016 +0100
+
+ [class.derived] Don't bother splitting last remark in note off into separate paragraph. (#1240)
+
+commit c6d00d91a0c464c528c6cd38c442ad6a11036aa7
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Dec 14 17:22:14 2016 +0100
+
+ [dcl.init, class.directory_iterator, fs.op.current_path] Split multiparagraph notes into multiple note paragraphs.
+
+ The paragraphs are unrelated and don't belong into a single note.
+
+commit f66fb79c44dc6051aa83d6489fee707a584ebe82
+Author: Johannes Laire <johannes@laire.fi>
+Date: Wed Dec 14 15:46:57 2016 +0000
+
+ [lib] Fix capitalization and punctuation in itemdescrs. (#1238)
+
+commit 6407d69c8e98e5d94e623c4cf84b1419ae12de62
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Dec 14 15:56:12 2016 +0100
+
+ [path.non-member] Structure multi-paragraph note using an itemization instead. (#1236)
+
+commit edd2c5fb29b2feb6a6acc23f843d351a8f06b2ec
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Dec 14 14:35:44 2016 +0000
+
+ [cstdint.syn] Add cross reference to C
+
+commit 122b2d896fe4049e30afb498b0e59be399dc0e45
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Dec 14 02:53:47 2016 +0000
+
+ [temp] Misc tweaks: tcode, ellipses, capitalization, comment spacing
+
+commit 4da0a38a1982e4cb65a06848051ca4c5a43b04bd
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 14 14:52:36 2016 +0100
+
+ [string.view.hash] Add a note about equality to string hashes. (#1235)
+
+ From http://lists.isocpp.org/lib/2016/12/1531.php.
+
+commit 776fd05bf781b265cfc96711d2abfd49a781ea20
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Dec 14 02:15:49 2016 +0000
+
+ Use \commentellip macro in a few more places
+
+commit 81eea5e1b5a477404b39176f71699f7b87a2dc01
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Dec 14 01:22:29 2016 +0000
+
+ [over.match.best] Convert footnote into ordinary note and remove overly tutorialisque explanations
+
+ Fixes #1232.
+
+commit 93631694be2ac0cd0aade763e50a49bef8f9c4b4
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 14 00:54:29 2016 +0100
+
+ [localization] Add numbered headings for synopses. (#1229)
+
+ Also remove use of \synopsis for class template definitions.
+
+ Partially addresses #566.
+
+commit 93ccb079c2a809aded1d71a21e783560be019492
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 14 00:49:33 2016 +0100
+
+ [algorithms] Add numbered heading for synopsis. (#1230)
+
+ Partially addresses #566.
+
+commit e6b9e3124c58f91f8d624f3d512f1f786e1f5adb
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 14 00:22:55 2016 +0100
+
+ [input.output] Add numbered headings for synopses. (#1228)
+
+ Remove now-empty 'Overview' sections.
+
+ Partially addresses #566.
+
+commit c9688d7dc5e4471868d84f92d98c43a01e7465e2
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Dec 13 23:31:04 2016 +0100
+
+ [mem.res.monotonic.buffer.ctor] Spell reference to a parameter correctly. (#1226)
+
+ Fixes #1055.
+
+commit a3f3773d4ca287c252a485c343348c729f60c82d
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Dec 13 23:06:39 2016 +0100
+
+ [lib] Use 'comparison function', not 'comparison operator'. (#1224)
+
+ When talking about an operator function, use the term defined in
+ [defns.comparison].
+
+ Fixes #612.
+
+commit 8b1f6cc8d73eec0306db1dec66f2da52a03ea274
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Dec 13 22:28:40 2016 +0100
+
+ [any] Rename the ValueType template parameter to T. (#1220)
+
+ The parameter has a confusing name: It is not actually the value type
+ contained in the 'any'.
+ Where the new T clashes with an existing use of T, rename the latter to VT,
+ since this is actually the value type of the 'any'.
+
+ Fixes #1202.
+
+commit e4bc84c405ac09ff7a5aa5b8df39d5e1f5b7bd39
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Dec 13 21:56:10 2016 +0100
+
+ [dcl.init.ref] Replace 'type qualifier' with 'cv-qualifier' in example. (#1222)
+
+ Fixes #1219.
+
+commit 1894a77ec88dd28d87985e162ef57c45580a9ad2
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Dec 13 21:53:28 2016 +0100
+
+ [list.ops] Move effects to 'Effects' element. (#1221)
+
+ Also reorder the elements so that 'Requires' is before 'Effects'.
+
+ Fixes #796.
+
+commit aefc83c6c66013c5053f4c184c4fd7bf400e96fe
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Dec 13 18:20:02 2016 +0100
+
+ [utility], [bitset] Introduce a separate heading for the synopsis. (#1213)
+
+ Partially addresses #566.
+
+commit 0a3f38c33d4fb7459fb507faf88591bc1828b31c
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Dec 13 18:19:08 2016 +0100
+
+ [bitset.members] Adjust confusing index entries for 'set' and 'any'. (#1218)
+
+ Fixes #743.
+
+commit bc42416f97adb35907af7af8fe407d3a445a1824
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Dec 12 23:56:13 2016 +0100
+
+ [thread] Add numbered headings for synopses. (#1214)
+
+ Partially addresses #566.
+
+commit 546a162c06881491f8394babb4147941f2af53ee
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Dec 12 16:45:28 2016 +0100
+
+ [pairs.spec], [tuple.creation] Avoid 'equality' of types phrasing. (#1212)
+
+ Fixes #491.
+
+commit 5ec123d3e037fc3b85542ea2f31b86c6375d7c06
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Dec 12 16:25:47 2016 +0100
+
+ [class.temporary] Add paragraph number and split off example into its own paragraph. (#1211)
+
+commit a8a89d9144a9050b85b8bfe780340a763193a1f4
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Mon Dec 12 14:46:31 2016 +0000
+
+ [pairs.pair, tuple.cnstr] Replace 'The constructor initializes' with just 'Initializes', which is how we say it in many other places. (#1206)
+
+commit 3c6ba0621a8e23c474f77fbee24b06d76b125dd3
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Mon Dec 12 01:50:27 2016 +0000
+
+ [special] Capitalize notes and examples that are complete sentences.
+
+commit 3a0d1be2ccd055f6bef1e91ebc2ca7ee19f3638e
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Mon Dec 12 01:33:44 2016 +0000
+
+ [class.cdtor] Clarify presentation of example
+
+ Seperate the hypothetical alternative case from the real code with newlines and describe in irrealis mood.
+
+commit 33375c726c64c4e602b52269708441f5cdccfa77
+Author: Sergey Zubkov <cubbi@cubbi.com>
+Date: Sun Dec 11 07:20:28 2016 -0500
+
+ [mem.res.syn] Call polymorphic_allocator a 'class template' (#1209)
+
+commit fdb5d1a7ed71add105ee5eca4307d9a6a042ba75
+Author: Sergey Zubkov <cubbi@cubbi.com>
+Date: Sun Dec 11 07:11:28 2016 -0500
+
+ [variant.bad.access] Use 'override' instead of 'virtual' in synopsis (#1208)
+
+commit edba6d4a097e9de2caa79461341b3c3476941790
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sat Dec 10 19:50:28 2016 +0000
+
+ [diff.cpp03.special] Use the more correct "call function f" rather than "call function f()" to resolve overfull line and fulfil compulsion for pedantry.
+
+commit 3c6d91088e58e56e295419efdd47ddc8a4628196
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sat Dec 10 17:10:54 2016 +0000
+
+ [func.not_fn] Clean-up not_fun
+
+ Use placeholder macros. Reformat class synopsis in our usual style. Reorder private members. Use codeblocks for long descriptions.
+
+ Addresses #693.
+
+commit 2b17f472d2c1fcfb96f5f9d4f5f7d799c6d336ae
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sat Dec 10 17:09:25 2016 +0000
+
+ [mem.res.pool.mem] Reorder and reflow do_is_equal descriptions.
+
+ Addresses #693 for that section.
+
+commit f9ce3d269eb5bd2ffd3bb74f79ba1298da1d83bc
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sat Dec 10 16:34:41 2016 +0000
+
+ [tuple.helper, variant.helper] Change "specialization of *class*" to "specialization of *template*".
+
+ The containing lines were too long (cf. #693), and the change is a mild increase in pedantic correctness.
+
+commit faaf054bd237780b3999c4efdbbcc2b6bf88721b
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Dec 9 23:32:42 2016 +0100
+
+ [limits] Use 'subnormal number' as defined by IEEE 754-2008 = ISO 60559. (#1203)
+
+ Also add index entries for 'denormalized value' and 'value,
+ denormalized', pointing to 'number, subnormal'.
+
+ Fixes #1017.
+
+commit 4f182cba568b3f753d2bdeb61c349bd65b8bf241
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Dec 8 23:02:33 2016 +0100
+
+ [util.smartptr.shared.atomic] Merge duplicate description items.
+
+ Partially addresses #288.
+
+commit b22cda3a831508a362930f6eb25d1f839f0f8ea8
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Dec 8 22:57:32 2016 +0100
+
+ [alg.lex.comparison] Remove duplicate 'Remarks:' item and comfort lone codeblock
+
+ Partially addresses #288.
+
+commit faecbe8a6f3db2bd411b64428c1f3345b1677550
+Author: Johannes Laire <johannes@laire.fi>
+Date: Thu Dec 8 15:19:45 2016 +0000
+
+ [rand.req.adapt] Fix syntax error (#1194)
+
+commit a9159bdbf9b6baa096f2c51d9129cd03431d03bd
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Thu Dec 8 16:08:58 2016 +0100
+
+ [numeric.special] Remove redundant 'inline' specifiers in example. (#1192)
+
+commit ff36dc5f586abb837a3963b1b8815a245bdbc741
+Author: Johannes Laire <johannes@laire.fi>
+Date: Thu Dec 8 10:47:07 2016 +0000
+
+ [depr] Add missing parentheses around bitwise expressions (#1191)
+
+commit b6d625f215dbac299982094cf54e4fed0999e873
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Thu Dec 8 10:06:47 2016 +0000
+
+ Hyphenate 'implementation-defined' in a few residual cases
+
+commit 77f36805a4adc0a5d145264fc5e5e6ab11b5e8f2
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Fri Dec 2 02:58:22 2016 +0000
+
+ [dcl.align] Touch up error comments
+
+commit 6d082aa3bed44e5342e55d19453d9669671063fa
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 7 23:07:21 2016 +0100
+
+ [intseq.general] Remove example not quite mirroring a standard function. (#1187)
+
+ Fixes #1176.
+
+commit 426dd1880198d5aaa51ae189d3e1d3780d3da1ce
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 7 22:28:33 2016 +0100
+
+ [containers, alg.transform] Minor presentation fixes. (#1184)
+
+ Harmonize the punctuation in complexity requirements where a definition
+ for N is introduced.
+ Add a missing closing parenthesis.
+ Add a full stop.
+
+ Fixes #191.
+
+commit ff91738d4f67123fa944a76506826f7a3c14b3e2
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 7 21:25:39 2016 +0100
+
+ [class.virtual] Remove awkward 'but'. (#1182)
+
+ Fixes #170.
+
+commit 4975167baaed59b6b3aab9d93ea14682c45a6217
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 7 20:44:25 2016 +0100
+
+ [function.objects] Introduce a new subsection for the <functional> synopsis. (#1179)
+
+ Also add a cross-reference from [unord.hash] to the synopsis, which
+ is the only place where the primary template is declared.
+
+ Fixes #192.
+
+commit d4c17ce01bf7b1419b330e798119b838ab8f1380
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 7 20:07:18 2016 +0100
+
+ [pairs.pair] Further harmonize spelling of template parameters for pair<U1, U2>. (#1178)
+
+ Fixes #125.
+
+commit 10ae5c39b0d4065486974c1c80d338b904a9f013
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Dec 7 12:13:32 2016 +0100
+
+ Capitalize examples outside sentences. (#1174)
+
+commit 5301db44da7db8839114f9c032e7fe293da31879
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Wed Dec 7 11:25:11 2016 +0100
+
+ Capitalize notes. (#1173)
+
+commit d2a69983b30ba4a3dec9bece774cb11fe50353c1
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Dec 7 01:37:27 2016 +0000
+
+ [stmt.stmt] Align comments to customary columns and reflow some very narrow comments
+
+commit 1fe866912ad07ea76353bb08723aad8552620f7c
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Dec 7 01:55:54 2016 +0100
+
+ [utility] Harmonize spelling of template parameters for std::pair<T1,T2>. (#1172)
+
+ Addresses #125.
+
+commit 99c6b4c6d08b99b36a10a50127b43ab461fd2f57
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Sat Dec 3 00:43:13 2016 +0000
+
+ [expr] Use same notation for collections of cv-qualification signatures as in [conv.qual]
+
+commit 2df5c6df7ee8cd884da607897b229cc8e1913ecb
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 29 02:47:55 2016 +0000
+
+ [basic] Reflow comments to be more compact; use math set notation for sets
+
+commit 28b0897221d9b641ef8439cfd29ef81b7d1f81b6
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Dec 2 00:40:17 2016 +0100
+
+ [headers, depr.c.headers] Avoid brittle counts of headers. (#1167)
+
+ Fixes #766.
+
+commit cf522b9177c01511a8c0b7197d9e48aa2224512d
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Dec 1 23:58:40 2016 +0100
+
+ [utilities] Do not use CamelCase for 'BaseCharacteristic'. (#1164)
+
+ This is a regular English phrase used as a technical term.
+
+ Fixes #1154.
+
+commit 69d8903278277e96779c8435fedad0018fe10ee4
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Dec 1 23:52:01 2016 +0100
+
+ [re.regex] Add missing 'multiline' constant. (#1162)
+
+ Fixes #1129.
+
+commit 19dc0aa5c8b8b53f0bfe17724fb26795c187c10a
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Fri Oct 21 11:39:17 2016 -0700
+
+ [dcl.init.aggr] Wording simplification. Aggregate elements are only
+ defined for purposes of aggregate initialization; we don't need to
+ repeat that every time we use the term.
+
+commit cca5257d60abcf9a62f545e9c146fe2c367f843a
+Author: Johannes Laire <johannes@laire.fi>
+Date: Wed Nov 30 00:03:04 2016 +0000
+
+ Move punctuation outside quotation marks according to logical nesting (#1148)
+
+commit a69d5beeaf1041c064cbad97db9b05a7e6ce079c
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 29 23:57:44 2016 +0000
+
+ [expr.prim.lambda] Move first paragraph below grammar.
+
+ Text before the main grammar needs to be very short; this first paragraph was getting out of hand.
+
+commit c58e854d79a71d7494c6c1bcf496c6795f10821b
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 29 21:47:05 2016 +0000
+
+ [string.classes] Turn <string> synopsis into numbered subclause
+
+ In pursuit of issue #566.
+
+commit 30e55475c622cdda9274f5d3af79eae416b650ef
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 29 21:38:41 2016 +0000
+
+ [tuple, variant] Turn synopses into numbered subclauses
+
+ In pursuit of issue #566.
+
+commit 48efdfe014549e6d116ce12ca427f7df0e0f8c70
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 29 19:58:48 2016 +0000
+
+ [pairs.pair], [tuple.tuple] Tidy up presentation of member functions (order elements consistently; use better index notation)
+
+ Also fixes issue #1117 and partially addresses issue #653.
+
+commit 807e6f951e19e418cbc379797d1c32e4b8a49dca
+Author: Johannes Laire <johannes@laire.fi>
+Date: Tue Nov 29 12:37:17 2016 -0500
+
+ [library] Capitalize headings
+
+commit bcd2eb6e3cfd68d90b4b761df8dd0728e4e0629b
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 29 02:52:44 2016 +0000
+
+ [basic.def.odf] Clarify example by adding a variable that actually odr-uses D()
+
diff --git a/papers/n4639.md b/papers/n4639.md
new file mode 100644
index 0000000000..291425caff
--- /dev/null
+++ b/papers/n4639.md
@@ -0,0 +1,1243 @@
+# N4639 Editors' Report -- Working Draft, Standard for Programming Language C++
+
+2016-02-06
+Richard Smith (editor) (Google Inc)
+Dawn Perchik (co-editor) (Embarcadero Technologies Inc)
+Thomas Köppe (co-editor) (Google DeepMind)
+``
+
+## Acknowledgements
+
+Special thanks to
+Jens Maurer
+for performing many of the editorial fixes since N4618.
+
+Thanks to all those who have [submitted editorial
+issues](https://github.com/cplusplus/draft/wiki/How-to-submit-an-editorial-issue)
+and to those who have provided pull requests with fixes.
+
+## New papers
+
+ * N4639 is this Editors' Report.
+ * [N4640](http://wg21.link/n4640) is the current working draft. It replaces [N4618](http://wg21.link/n4618).
+
+### Motions incorporated into working draft
+
+This revision contains only editorial changes relative to N4618.
+
+## Notable editorial changes
+
+ * Jens Maurer performed a cleanup of the `valarray` wording, converting it
+ to use the standard formatting style and descriptive elements for library
+ wording. Thanks also to Jonathan Wakely and Marshall Clow for verifying
+ that this change preserves the normative meaning.
+
+ * [alg.partitions] is now nested under [alg.sorting] rather than
+ [alg.modifying.operations]. This is a better fit because `partition` is a
+ partial sort (just like `nth_element` is), and `is_partitioned` is not a
+ mutating sequecne operation.
+
+## Minor editorial fixes
+
+A log of editorial fixes made since N4618 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](https://github.com/cplusplus/draft/compare/n4618...n4640).
+
+ commit f77a2b27e9e68eacedb23d675d2d257125f3a7e7
+ Author: Jens Maurer
+ Date: Mon Feb 6 19:54:31 2017 +0100
+
+ Define 'object type' only once. (#1268)
+
+ There were only a few references to the definition in
+ 1.8 [intro.object], so drop that definition and refer
+ to 'type of an object' instead.
+
+ Fixes #511.
+
+ commit fec48d5db12705f1fcec4be6a9ceb3a067c305cd
+ Author: Eelis
+ Date: Mon Feb 6 03:09:41 2017 +0100
+
+ [valarray.access] 'evaluates as' -> 'evaluates to'. (#1337)
+
+ commit b79c41937b0150569e1428d1093d9504762f15dd
+ Author: Jens Maurer
+ Date: Mon Feb 6 02:02:39 2017 +0100
+
+ [numarray] Add standard description elements. (#1215)
+
+ Partially addresses #1071.
+
+ commit 1f8ab13005ff2820d4044c6707a1dabfebce2c1b
+ Author: Jens Maurer
+ Date: Mon Feb 6 02:01:59 2017 +0100
+
+ [dcl.init.aggr] Add example for array of unknown bound (#1270)
+
+ * Consistently refer to 'array of unknown bound'
+ not 'array of unknown size'; see [dcl.array].
+
+ * [dcl.init.aggr] Add example for array of unknown bound
+ as non-static data member.
+
+ Addresses core issue 1985.
+
+ Fixes #396.
+
+ commit ec9f102dec2e4624750f01cdebc6f7132361edaa
+ Author: Thomas Köppe
+ Date: Sun Feb 5 17:39:12 2017 +0000
+
+ [cinttypes.syn] Add missing 'the', capitalize sentence
+
+ commit e23a5df2f8819c88b87e3392d6522b747481e381
+ Author: Thomas Köppe
+ Date: Sun Feb 5 17:13:46 2017 +0000
+
+ [iostream.format] Minor rewording to be more accurate and fit the lines better
+
+ commit 1a0dd180eb3ea3af05cdf1f573eb6f69b0f1b152
+ Author: Thomas Köppe
+ Date: Sun Feb 5 14:51:08 2017 +0000
+
+ Format "i^th" consistently.
+
+ Fixes #653, see also #974.
+
+ commit 24900a40ed833ccebb1f3760efe366e4ba73109a
+ Author: Thomas Köppe
+ Date: Sun Feb 5 14:26:33 2017 +0000
+
+ [cpp] Swap "control-line" and "if-section".
+
+ With the increased vertical grammar spacing, it is expedient to put the presentation of "control-line" onto the first page so as not to require a huge gap.
+
+ commit 4935ed404aa4819e63c560aa2104dbfa70d18f40
+ Author: Thomas Köppe
+ Date: Sun Feb 5 13:09:48 2017 +0000
+
+ [ratio.{syn,comparison}] Mild reformatting for consistency.
+
+ Fixes #1402.
+
+ commit 50353bd3bb69d770d00e2fb9236bc913994b96c7
+ Author: Thomas Köppe
+ Date: Sun Feb 5 13:03:56 2017 +0000
+
+ [associative.set.syn] Fix cross-reference link for 'multiset'
+
+ Fixes #1424.
+
+ commit 766792134b9edb507c569ead9745d12c56735115
+ Author: Thomas Köppe
+ Date: Sun Feb 5 12:20:50 2017 +0000
+
+ [algorithms.parallel] Add missing \pnum
+
+ Fixes #1432.
+
+ commit e88d2343b441b399673aa934de766323c68353f5
+ Author: Marshall Clow
+ Date: Sat Feb 4 20:48:13 2017 -0800
+
+ [string.view.template] Change the `reference`, `pointer` etc typedefs in `string_view` to use `value_type` rather than `charT` (#1416)
+
+ This is a cut down version of https://github.com/cplusplus/draft/pull/141, to ensure that it is editorial
+
+ commit 04fa63d98ac28457ea038b75fa05f49d14d8ab5b
+ Author: Jens Maurer
+ Date: Sun Feb 5 05:12:58 2017 +0100
+
+ Use 'base class subobject', not 'base subobject' (#1382)
+
+ Fixes #1379.
+
+ commit 2de42d5a857886ee1200990ce40f7d8e61eb2293
+ Author: Thomas Köppe
+ Date: Sun Feb 5 04:07:38 2017 +0000
+
+ [func.bind.is{bind,place}] Don't begin sentences with code.
+
+ commit 7b704e1759cb09b65c0443c9f63b4773b153d000
+ Author: Eelis
+ Date: Sun Feb 5 04:46:40 2017 +0100
+
+ Capitalize examples where appropriate. (#1356)
+
+ commit 1e00bc3e8addc7b263ecbc7b2f5a510c904b876c
+ Author: Jens Maurer
+ Date: Sun Feb 5 04:45:13 2017 +0100
+
+ [class.temporary] Use 'Clause~\ref{class.access}' (#1348)
+
+ Fixes #1347.
+
+ commit 73b2294ca033dee878d678d5c79adc62e352559e
+ Author: Billy O'Neal
+ Date: Sat Feb 4 19:44:16 2017 -0800
+
+ [atomics.syn] Don't describe function template overloads as "partial specializations"
+
+ commit 41c6bac2314892f1b51b0ef4d22fd7aedb9562a5
+ Author: Eelis
+ Date: Sun Feb 5 04:43:14 2017 +0100
+
+ [string.io] Don't refer to sentry by name it was not given. (#1333)
+
+ commit 4408f4667327fffa4e527995a1b73f674e459927
+ Author: Jens Maurer
+ Date: Sun Feb 5 04:42:14 2017 +0100
+
+ [lib] Replace pre: and post: in requirements tables (#1284)
+
+ with \requires and \postcondition, respectively.
+
+ Also replace yields: with \returns and effect: with \effects.
+
+ Fixes #1281.
+
+ commit cf2241bd976a3759a1a036e239471ceda48fb06c
+ Author: Eelis
+ Date: Sun Feb 5 04:38:27 2017 +0100
+
+ [conv.lval] Split off description of conversion result into dedicated paragraph. (#1318)
+
+ commit a665fddad337ac8316695c06730a59e2051eaa5d
+ Author: Jens Maurer
+ Date: Sun Feb 5 04:36:14 2017 +0100
+
+ Harmonize formatting of 'main' function. (#1308)
+
+ Consistently use \tcode{main}.
+ Add cross-references to [basic.start.main].
+
+ Fixes #1304.
+
+ commit 6841997d7c36b2a4c14d638de00c1804d018c844
+ Author: Eelis
+ Date: Sun Feb 5 04:34:59 2017 +0100
+
+ [expr] Split off definition of 'composite pointer type' into dedicated paragraph. (#1300)
+
+ commit 7fcb601a9ee72dd45f7df8001c23b9f7cb8b0aca
+ Author: Eelis
+ Date: Sun Feb 5 04:33:04 2017 +0100
+
+ [strings] Remove remarks that repeat what was stated a few lines before. (#1289)
+
+ commit bc106e5f01563337b4069998c6e149b795b65111
+ Author: Thomas Köppe
+ Date: Sun Feb 5 03:31:13 2017 +0000
+
+ [tuple.creation] Simplify the introductory notation, and then use notation that matches the introduction. (#1251)
+
+ commit e5674e1d47bbd87ecd4caefb3f37c4c3cb3551df
+ Author: Jens Maurer
+ Date: Sun Feb 5 04:30:31 2017 +0100
+
+ [func.bind.bind] Reformat to use math-style indexing. (#1285)
+
+ Partially addresses #1139.
+
+ commit 9a5c34e6a8c86a93167724aa5061415f1df8a069
+ Author: Jens Maurer
+ Date: Sun Feb 5 03:30:12 2017 +0100
+
+ [stmt.dcl] Clarify footnote about deadlock avoidance. (#1266)
+
+ Fixes #849.
+
+ commit 4b0d533134e61f713a877dadbe6df92f64291d6a
+ Author: Jens Maurer
+ Date: Fri Dec 16 16:25:04 2016 +0100
+
+ [lib] Harmonize casing for 'shall meet the requirements of ... iterator'.
+
+ Also cross-reference the sections, not the tables, for
+ iterator requirements.
+
+ Fixes #696.
+
+ commit 03c356f9d764a8230323bf2fdc77495b98032780
+ Author: Jens Maurer
+ Date: Fri Dec 16 16:17:02 2016 +0100
+
+ [time.point] Fix cross-reference to clock requirements.
+
+ commit 55a498202fb5b558cd93635a63ed111931634b0a
+ Author: Jens Maurer
+ Date: Sun Feb 5 02:01:30 2017 +0100
+
+ [lex.literal] Avoid references to plain 'literal' (#1277)
+
+ unless the \grammarterm is intended.
+
+ Fixes #322.
+
+ commit 469e9f021fe65774b5845350be3cff4a12d40680
+ Author: Jens Maurer
+ Date: Sat Feb 4 21:12:04 2017 +0100
+
+ [namespace.udecl] Clarify error in example. (#1254)
+
+ commit 26e92b499f7a41c7b65c7e2828a1608021adf695
+ Author: Jens Maurer
+ Date: Sat Feb 4 21:02:59 2017 +0100
+
+ [temp.deduct] Avoid talking about 'side effect' and 'evaluation' (#1252)
+
+ when discussing template instantiations.
+
+ commit 43c20dbebf207d985f8d051d2994ce22108049e4
+ Author: Jens Maurer
+ Date: Sat Feb 4 20:52:06 2017 +0100
+
+ [alg.partitions] Move entire subclause to [alg.sorting]. (#1245)
+
+ The non-modifying operation is_partitioned doesn't fit into
+ 'mutating sequence operations', and partitioning can be
+ considered a weak sort.
+
+ Fixes #289.
+
+ commit 42578d91450b0b563e076151427b6deff4647f6d
+ Author: Thomas Köppe
+ Date: Sat Feb 4 19:44:57 2017 +0000
+
+ [macros, styles] Remove minipages from BNF environments and use a custom enumitem list for spacing. (#1170)
+
+ BNF entries are now spaced like normal paragraphs. Individual paragraphs are kept on a single page by setting a high widow penalty.
+
+ It is now immaterial whether multiple nontermdefs are contained in a single bnf environment, or whether each def is in its own environment. Pages can break between elements, not within.
+
+ commit 23d739974007c3f827ad2e55da60cb4358681773
+ Author: Jens Maurer
+ Date: Sat Feb 4 20:19:51 2017 +0100
+
+ [lib] Replace 'Notes:' elements with regular [ Note: ... -- end note] (#1160)
+
+ Remove the \realnotes and \realnote macros.
+ No longer mention 'Notes:' in [structure.specifications].
+
+ Fixes #492.
+
+ commit 5a1d430e6c09099ba7e420db733bcf116e8ca868
+ Author: Jonathan Wakely
+ Date: Sat Feb 4 19:08:19 2017 +0000
+
+ [streambuf.virt.get] use half-open ranges in underflow effects (#1157)
+
+ commit a50661aa098dca6cb7b34061e2d30fd541999cd4
+ Author: Jonathan Wakely
+ Date: Sat Feb 4 19:00:02 2017 +0000
+
+ [locale.time.get] change undefined term "record" to "object" (#1412)
+
+ commit 3f0133279c6852aa7e7c20c2b5e97f32d80847a8
+ Author: Jens Maurer
+ Date: Sat Feb 4 19:59:31 2017 +0100
+
+ [support.types] Properly describe header (#1415)
+
+ After the synopsis for , add a sentence (cloned from cstdlib.syn)
+ that the contents are the same as except for wchar_t,
+ [support.types.nullptr], and [support.types.layout].
+
+ Fixes #1404.
+
+ commit 06c788de055ef33fa8aae1d479b01600c399a86b
+ Author: Eelis
+ Date: Sat Feb 4 19:51:51 2017 +0100
+
+ Don't parenthesize \refs after 'in'/'of'/'notwithstanding'. (#1420)
+
+ commit 0f8ca3d7da39bd290062408ca2b2572c40994e9a
+ Author: Eelis
+ Date: Sat Feb 4 19:50:25 2017 +0100
+
+ [lex.phases] Remove stray period. (#1421)
+
+ commit 25fb80b3521531d71bb45c677ed9eace5b39f7ae
+ Author: Jonathan Wakely
+ Date: Fri Feb 3 18:49:37 2017 +0000
+
+ [forwardlist.ops] Add comma
+
+ commit 019585eb4da447ff6a41fa766056b4febff08c25
+ Author: timsong-cpp
+ Date: Wed Feb 1 08:17:03 2017 +0800
+
+ [locale.facet] add missing backslash in \defn (#1418)
+
+ commit ed8dbf4c0bce4adf96307c1d427dde0685f7dbdf
+ Author: Eelis
+ Date: Mon Jan 30 13:43:20 2017 +0100
+
+ [dcl.enum] Italicize 'unscoped enumeration' in its definition. (#1410)
+
+ commit c7f6a9139872aad48a944d018ce5e4b3de15ce81
+ Author: Axel Naumann
+ Date: Thu Jan 26 17:04:41 2017 +0100
+
+ [thread.lock.algorithm] Change '0-based' to 'zero-based'.
+
+ Conforming with other occurrences in the standard.
+
+ commit b63d68ab7bc08f5e969a5b44b000941e6e82eb2e
+ Author: Eelis
+ Date: Sun Jan 22 21:26:37 2017 +0100
+
+ [basic.ios.cons] Remove stray semicolon. (#1397)
+
+ commit 701df7eac2474300d2b602700a3c32a51ef439a7
+ Author: Eelis
+ Date: Sun Jan 22 18:35:35 2017 +0100
+
+ Add missing \pnums. (#1396)
+
+ commit 5ce8ed130a43ffc17b1d05d349e9568831016891
+ Author: Jonathan Wakely
+ Date: Fri Jan 20 17:54:09 2017 +0000
+
+ [special] Add comma.
+
+ commit 03c99a1b516a85000456841b061d5b1f17b32e48
+ Author: Jonathan Wakely
+ Date: Fri Jan 20 17:52:52 2017 +0000
+
+ [optional.ctor] add missing \pnum
+
+ commit 4bbb3ba2e4e7065900c12b97710db3e398c6ee2d
+ Author: Eelis
+ Date: Fri Jan 20 18:48:20 2017 +0100
+
+ [cpp.pragma.op] Add missing \pnums and remove unwanted paragraph breaks. (#1387)
+
+ commit d2263429a07205edf8d2ffcd6d41cfe5d61544f8
+ Author: Jens Maurer
+ Date: Thu Jan 19 00:17:04 2017 +0100
+
+ [dcl.link] Index implementation-defined behavior. (#1330)
+
+ Fixes #1326.
+
+ commit 61c4f655ac96e2eba807f8e13f9adae1405bdf49
+ Author: Eelis
+ Date: Wed Jan 18 23:24:39 2017 +0100
+
+ [dcl.ambig.res] Describe example ambiguous case more clearly. (#1371)
+
+ commit 94c7fdf49d51898a10c846bb0409bf07ba66256c
+ Author: Eelis
+ Date: Wed Jan 18 23:23:57 2017 +0100
+
+ Consistently use 'this International Standard'. (#1380)
+
+ commit 95977f18c0594a12a90ca050ec5f8006b4b7bf53
+ Author: Eelis
+ Date: Wed Jan 18 22:59:08 2017 +0100
+
+ Add missing hyphen in 'floating-point'. (#1319)
+
+ commit 2001a03014df142f5f9a5974c64fc2ff96d4f2cd
+ Author: Jens Maurer
+ Date: Wed Jan 18 22:47:23 2017 +0100
+
+ 'floating-point something', not 'floating point something' (#1384)
+
+ Adjust occurrences that spanned a line break in the LaTeX
+ source and were therefore missed in commit
+ cd3deb891cee5436a64ff9a8f7bb304a4fcc6c00.
+
+ commit c8295e3a928f93cff021d88b7b1532b5a58d5114
+ Author: Jens Maurer
+ Date: Wed Jan 18 22:45:41 2017 +0100
+
+ [stmt.stmt], [dcl.attr.deprecated] Remove hyphen in 're-declared' (#1381)
+
+ Fixes #1378.
+
+ commit 2b0db35833f8ccce30744b46465e609e4b109366
+ Author: Thomas Köppe
+ Date: Wed Jan 18 14:57:38 2017 +0000
+
+ [utilities.general] Update reference to bitset section and add missing \rowsep
+
+ commit 417d713d341911e3e366610c85761d246785f02f
+ Author: Thomas Köppe
+ Date: Wed Jan 18 00:33:11 2017 +0000
+
+ [over.match.best, over.ics.rank] Remove premature ends of sentences.
+
+ This addresses a major part of #90.
+
+ commit d76a411d35b1ed933cb5d11dc492ab4489cb239e
+ Author: Thomas Köppe
+ Date: Tue Jan 17 23:48:02 2017 +0000
+
+ [over.ics.rank] Replace self-referential reference with 'this subclause'
+
+ commit ee154f9dd08d93124455f408f69030862acca9eb
+ Author: Alisdair Meredith
+ Date: Mon Jan 16 07:25:43 2017 -0500
+
+ Fix remaining uses of \Cpp macro (#1366)
+
+ I believe this patch catches the last two places in the current
+ draft that should be using a variant of the \Cpp macros to
+ better render the 'C++' string.
+
+ commit 4e6dc965fc2a2f562d8bd62cafe5a1d51745a79d
+ Author: Thomas Köppe
+ Date: Fri Jan 13 14:32:39 2017 +0000
+
+ [re] Move long pieces of code into codeblocks and remove redundant "the result of" from return statements
+
+ This fixes overfull hboxes, see #693.
+
+ commit ab8f2c7c0331efbb9713a46d4c940df94a0e48f7
+ Author: Jens Maurer
+ Date: Tue Jan 10 11:04:16 2017 +0100
+
+ [mem.res.pool], [mem.res.monotonic.buffer] Do not define the otherwise unused term 'owns'. (#1260)
+
+ Fixes #1257.
+
+ commit 3acb49d296ba7efdc7542e943262138dc0eb9b74
+ Author: Jonathan Wakely
+ Date: Fri Jan 6 19:21:45 2017 +0000
+
+ [string.insert] Change "pos1" to "pos" for overloads taking one position
+
+ Also make argument names in synopsis consistent.
+
+ Fixes #1338
+
+ commit 732fd444a33043bce3caf6d6d939f6e81fb56ddd
+ Author: Jens Maurer
+ Date: Thu Jan 5 13:04:01 2017 +0100
+
+ [rand.adapt.shuf] Show exposition-only members in the order in which initialization is described. (#1332)
+
+ Fixes #1331.
+
+ commit b9081cc3d7a314ac336695166e0123cdb1da6623
+ Author: Kazutoshi SATODA
+ Date: Wed Jan 4 23:31:49 2017 +0900
+
+ [dcl.init] Fix a typo in definition of const-default-constructible (#1327)
+
+ commit 10452d174140fbcf0bfc1fab37dbdbd63913be79
+ Author: Eelis
+ Date: Wed Jan 4 11:45:00 2017 +0100
+
+ [complex.ops] Don't repeat declaration in "Effects:" element. (#1324)
+
+ commit 94c2fbabdc1057d7bc7cdb83d1585d24de3fd146
+ Author: Eelis
+ Date: Tue Jan 3 18:05:03 2017 +0100
+
+ [re.submatch.op] Remove excessive parentheses in "Returns:" element. (#1323)
+
+ commit 3b81b0b9cafacee9d23b47d1a8862a9d0eee6ab7
+ Author: Jens Maurer
+ Date: Tue Jan 3 16:58:58 2017 +0100
+
+ [sf.cmath] Fix 'where' associations of Greek variable names. (#1317)
+
+ Fixes #1291.
+
+ commit 2416d453c28a821076a1046bec1b13d6dd8ee7d7
+ Author: Jens Maurer
+ Date: Tue Jan 3 16:05:27 2017 +0100
+
+ [util.smartptr.enab] Remove leftover postcondition after P0033R1. (#1314)
+
+ Fixes #1299.
+
+ commit 0effa034c24cc78f5128d36327f0d30047531b89
+ Author: Jens Maurer
+ Date: Tue Jan 3 16:02:08 2017 +0100
+
+ [class.derived] Avoid \pnum inside examples. (#1265)
+
+ Fixes #781.
+
+ commit 2163ad27876b6e0423650c71b01646a8daca6cdc
+ Author: timsong-cpp
+ Date: Tue Jan 3 07:36:29 2017 -0500
+
+ [meta.trans.other] add missing cv for common_type (#1292)
+
+ P0435R1 says 'cv void', but the cv part was dropped.
+
+ commit 09e6e6de2e92c33daa53ee1013847df68c99ad52
+ Author: alexanderkscott
+ Date: Sat Dec 31 14:06:51 2016 +0000
+
+ [iterators, numerics] Replace 'sub-clause' by 'subclause' (#1302)
+
+ commit 2168e10fb3608d4ab84190d3d0c8cd5101dc52b9
+ Author: Eelis
+ Date: Fri Dec 30 16:46:18 2016 +0100
+
+ Capitalize notes that consist of complete sentences. (#1297)
+
+ commit 3681e72ce5b8d0f09e15bfb4fef11bd230951cc6
+ Author: Thomas Köppe
+ Date: Wed Dec 21 18:58:54 2016 +0000
+
+ [conv.qual] Consistent notation for indexed types T_1, T_2
+
+ commit 3e2b77aed27438f6751ad59ca75fc90bde79993b
+ Author: Jens Maurer
+ Date: Wed Dec 21 19:55:02 2016 +0100
+
+ Mechanically harmonize indexed types to $\tcode{T}_i$. (#1283)
+
+ Replace \tcode{T}$_i$ and $T_i$ with $\tcode{T}_i$.
+
+ commit 0b9f60c4c373e57cda055b7aba64afb674db1fff
+ Author: Eelis
+ Date: Wed Dec 21 18:14:54 2016 +0100
+
+ [string.view.find] Add missing 'be' (#1282)
+
+ commit d49359badc2115b010dcf978d86067f1a2cfb331
+ Author: Jens Maurer
+ Date: Tue Dec 20 16:47:32 2016 +0100
+
+ [containers] Replace pre: and post: in requirements tables with \requires and \postcondition, respectively. (#1273)
+
+ Fixes #792.
+
+ commit 9fe30c8353b264318a1c90d2ce817347e1f6738c
+ Author: Casey Carter
+ Date: Sun Dec 18 15:34:21 2016 -0800
+
+ Fix typos in [mem.poly.allocator.mem]/9.1 and /9.5 (#1269)
+
+ (There is no "T" in scope.)
+
+ commit 666886e51092f447e9ecb6f26a2965a8c03da667
+ Author: Jens Maurer
+ Date: Mon Dec 19 00:31:51 2016 +0100
+
+ [associative.reqmts] Harmonize capitalization. (#1271)
+
+ Older entries seem to start with a lowercase letter and only
+ have a full stop if a second sentence follows. For newer
+ entries (initializer lists, node_handle functions), apply
+ that style, too.
+
+ Fixes #328.
+
+ commit a3afbc8daaa557cc0cd1f76e40158032ca6f097f
+ Author: Jens Maurer
+ Date: Fri Dec 16 15:47:47 2016 +0100
+
+ Avoid \pnum inside examples. (#1262)
+
+ With the exception of [facets.examples].
+
+ Fixes #781.
+
+ commit 5d129b232ac55abeb508a8f890d478a45eab5554
+ Author: Jens Maurer
+ Date: Fri Dec 16 12:43:55 2016 +0100
+
+ [dcl.array], [temp.deduct.type] Split notes spanning numbered paragraphs. (#1261)
+
+ Partially addresses #781.
+
+ commit 3750b234c1699d2c7b0f83e2c52fbd65d74c4299
+ Author: Jens Maurer
+ Date: Thu Dec 15 17:43:32 2016 +0100
+
+ [unique.ptr.single.modifiers] Use 'if and only if' when calling deleter. (#1255)
+
+ Fixes #248.
+
+ commit 8e64a085cdcd7c41b3f4d4298933cb52b6572420
+ Author: Jens Maurer
+ Date: Thu Dec 15 17:42:24 2016 +0100
+
+ [sf.math] Promote parenthesized parts of function names to un-parenthesized. (#1256)
+
+ Fixes #1250.
+
+ commit f8904bd946650f240a6af76193f406377e2fb1b7
+ Author: Jens Maurer
+ Date: Wed Nov 30 19:50:31 2016 +0100
+
+ [support.limits] Rearrange section 'Implementation properties'
+
+ - Change order of subsections.
+ - Remove [limits] and [c.limits] subsection headings.
+ - Move descriptions of numeric_limits members and specializations as
+ subsections under the description of the primary class template.
+ - Add sectioning comments to the synopsis.
+
+ Fixes #785.
+
+ commit 9a6d4c3a14d77eaea17044e3b52942582d65eac8
+ Author: Thomas Köppe
+ Date: Thu Dec 15 00:29:13 2016 +0000
+
+ [forward] Remove mid-example paragraph breaks
+
+ commit 7f7e757693b3173d9490e63e28f384fbba7dcd91
+ Author: Thomas Köppe
+ Date: Wed Dec 14 23:49:59 2016 +0000
+
+ Change a few stray headings to sentence case
+
+ Fixes #1200 and #1201.
+
+ commit 32026a5b490a8f0b310530425108247694968def
+ Author: Jens Maurer
+ Date: Mon Nov 21 22:45:55 2016 +0100
+
+ [class.copy] Rephrase rule preferring a move constructor
+ in a throw-expression or a return statement.
+
+ Fixes #712.
+
+ commit 19a0c06093e39f5b0a85316f2564312c9e52b129
+ Author: Thomas Köppe
+ Date: Wed Dec 7 20:02:50 2016 +0000
+
+ [temp.class] Reorganize examples into a separate paragraph
+
+ commit 64e5cffbef31b7a00175d969fae2cf5f70c27f48
+ Author: W-E-Brown
+ Date: Wed Dec 14 17:03:23 2016 -0600
+
+ s/(possibly cv-qualified)/\\cv{}~/ and allied changes (#1142)
+
+ Applied across the entire standard.
+
+ commit 571a258bd4d59725e1bbbb69febaffb3d3a513ed
+ Author: Thomas Köppe
+ Date: Wed Dec 14 22:55:05 2016 +0000
+
+ [input.output] Add references to inclusions in a synopsis
+
+ commit eacf4129776df8481599ec44e0c256590aed1ccb
+ Author: Thomas Köppe
+ Date: Sat Dec 10 17:56:41 2016 +0000
+
+ [{ex,in}clusive.scan, transform.{ex,in}clusive.scan]: Rephase 'for each *j' in terms of indexes
+
+ Addresses #693 for this part, but is also clearer.
+
+ commit c39761a36fed573e369ccccd81f54ee2c9f69930
+ Author: Jens Maurer
+ Date: Wed Dec 14 21:13:57 2016 +0100
+
+ [iostream.forward.overview] Promote introductory
+ sentences to normative text.
+
+ Fixes #494.
+
+ commit 5f0f4df6ab6dfa566d394da9c4321c1015f63747
+ Author: Richard Smith
+ Date: Wed Dec 14 12:21:10 2016 -0800
+
+ [basic.def.odr] Clarify that the "not an odr use" requirement for using
+ an internal linkage constant within an inline function (etc) only
+ applies to odr-uses within that inline function, and not uses elsewhere
+ in the program.
+
+ commit 2f3c3b8c3a401fd6d8f081b608db6572be01b7e0
+ Author: Jens Maurer
+ Date: Wed Dec 14 18:46:51 2016 +0100
+
+ [temp] Add variable templates to the definition of 'template'. (#1225)
+
+ Fixes #593.
+
+ commit f32e068898a371b94a27f895f3863a810186e70e
+ Author: Jens Maurer
+ Date: Wed Dec 14 18:38:09 2016 +0100
+
+ [unord] Use 'key equality predicate' consistently. (#1241)
+
+ Replaces occasional uses of 'key equality function'.
+
+ Fixes #630.
+
+ commit b54f2507ffc23c0e573f4637217003b4074c33aa
+ Author: Eelis
+ Date: Wed Dec 14 18:37:20 2016 +0100
+
+ [strings, algorithms, diff] Replace 'routine' with 'function'. (#1217)
+
+ commit 7b087da9cd6867fd6b8b499c6ec766499db48772
+ Author: Eelis
+ Date: Wed Dec 14 17:58:47 2016 +0100
+
+ [class.derived] Don't bother splitting last remark in note off into separate paragraph. (#1240)
+
+ commit c6d00d91a0c464c528c6cd38c442ad6a11036aa7
+ Author: Eelis
+ Date: Wed Dec 14 17:22:14 2016 +0100
+
+ [dcl.init, class.directory_iterator, fs.op.current_path] Split multiparagraph notes into multiple note paragraphs.
+
+ The paragraphs are unrelated and don't belong into a single note.
+
+ commit f66fb79c44dc6051aa83d6489fee707a584ebe82
+ Author: Johannes Laire
+ Date: Wed Dec 14 15:46:57 2016 +0000
+
+ [lib] Fix capitalization and punctuation in itemdescrs. (#1238)
+
+ commit 6407d69c8e98e5d94e623c4cf84b1419ae12de62
+ Author: Eelis
+ Date: Wed Dec 14 15:56:12 2016 +0100
+
+ [path.non-member] Structure multi-paragraph note using an itemization instead. (#1236)
+
+ commit edd2c5fb29b2feb6a6acc23f843d351a8f06b2ec
+ Author: Thomas Köppe
+ Date: Wed Dec 14 14:35:44 2016 +0000
+
+ [cstdint.syn] Add cross reference to C
+
+ commit 122b2d896fe4049e30afb498b0e59be399dc0e45
+ Author: Thomas Köppe
+ Date: Wed Dec 14 02:53:47 2016 +0000
+
+ [temp] Misc tweaks: tcode, ellipses, capitalization, comment spacing
+
+ commit 4da0a38a1982e4cb65a06848051ca4c5a43b04bd
+ Author: Jens Maurer
+ Date: Wed Dec 14 14:52:36 2016 +0100
+
+ [string.view.hash] Add a note about equality to string hashes. (#1235)
+
+ From http://lists.isocpp.org/lib/2016/12/1531.php.
+
+ commit 776fd05bf781b265cfc96711d2abfd49a781ea20
+ Author: Thomas Köppe
+ Date: Wed Dec 14 02:15:49 2016 +0000
+
+ Use \commentellip macro in a few more places
+
+ commit 81eea5e1b5a477404b39176f71699f7b87a2dc01
+ Author: Thomas Köppe
+ Date: Wed Dec 14 01:22:29 2016 +0000
+
+ [over.match.best] Convert footnote into ordinary note and remove overly tutorialisque explanations
+
+ Fixes #1232.
+
+ commit 93631694be2ac0cd0aade763e50a49bef8f9c4b4
+ Author: Jens Maurer
+ Date: Wed Dec 14 00:54:29 2016 +0100
+
+ [localization] Add numbered headings for synopses. (#1229)
+
+ Also remove use of \synopsis for class template definitions.
+
+ Partially addresses #566.
+
+ commit 93ccb079c2a809aded1d71a21e783560be019492
+ Author: Jens Maurer
+ Date: Wed Dec 14 00:49:33 2016 +0100
+
+ [algorithms] Add numbered heading for synopsis. (#1230)
+
+ Partially addresses #566.
+
+ commit e6b9e3124c58f91f8d624f3d512f1f786e1f5adb
+ Author: Jens Maurer
+ Date: Wed Dec 14 00:22:55 2016 +0100
+
+ [input.output] Add numbered headings for synopses. (#1228)
+
+ Remove now-empty 'Overview' sections.
+
+ Partially addresses #566.
+
+ commit c9688d7dc5e4471868d84f92d98c43a01e7465e2
+ Author: Jens Maurer
+ Date: Tue Dec 13 23:31:04 2016 +0100
+
+ [mem.res.monotonic.buffer.ctor] Spell reference to a parameter correctly. (#1226)
+
+ Fixes #1055.
+
+ commit a3f3773d4ca287c252a485c343348c729f60c82d
+ Author: Jens Maurer
+ Date: Tue Dec 13 23:06:39 2016 +0100
+
+ [lib] Use 'comparison function', not 'comparison operator'. (#1224)
+
+ When talking about an operator function, use the term defined in
+ [defns.comparison].
+
+ Fixes #612.
+
+ commit 8b1f6cc8d73eec0306db1dec66f2da52a03ea274
+ Author: Jens Maurer
+ Date: Tue Dec 13 22:28:40 2016 +0100
+
+ [any] Rename the ValueType template parameter to T. (#1220)
+
+ The parameter has a confusing name: It is not actually the value type
+ contained in the 'any'.
+ Where the new T clashes with an existing use of T, rename the latter to VT,
+ since this is actually the value type of the 'any'.
+
+ Fixes #1202.
+
+ commit e4bc84c405ac09ff7a5aa5b8df39d5e1f5b7bd39
+ Author: Jens Maurer
+ Date: Tue Dec 13 21:56:10 2016 +0100
+
+ [dcl.init.ref] Replace 'type qualifier' with 'cv-qualifier' in example. (#1222)
+
+ Fixes #1219.
+
+ commit 1894a77ec88dd28d87985e162ef57c45580a9ad2
+ Author: Jens Maurer
+ Date: Tue Dec 13 21:53:28 2016 +0100
+
+ [list.ops] Move effects to 'Effects' element. (#1221)
+
+ Also reorder the elements so that 'Requires' is before 'Effects'.
+
+ Fixes #796.
+
+ commit aefc83c6c66013c5053f4c184c4fd7bf400e96fe
+ Author: Jens Maurer
+ Date: Tue Dec 13 18:20:02 2016 +0100
+
+ [utility], [bitset] Introduce a separate heading for the synopsis. (#1213)
+
+ Partially addresses #566.
+
+ commit 0a3f38c33d4fb7459fb507faf88591bc1828b31c
+ Author: Jens Maurer
+ Date: Tue Dec 13 18:19:08 2016 +0100
+
+ [bitset.members] Adjust confusing index entries for 'set' and 'any'. (#1218)
+
+ Fixes #743.
+
+ commit bc42416f97adb35907af7af8fe407d3a445a1824
+ Author: Jens Maurer
+ Date: Mon Dec 12 23:56:13 2016 +0100
+
+ [thread] Add numbered headings for synopses. (#1214)
+
+ Partially addresses #566.
+
+ commit 546a162c06881491f8394babb4147941f2af53ee
+ Author: Jens Maurer
+ Date: Mon Dec 12 16:45:28 2016 +0100
+
+ [pairs.spec], [tuple.creation] Avoid 'equality' of types phrasing. (#1212)
+
+ Fixes #491.
+
+ commit 5ec123d3e037fc3b85542ea2f31b86c6375d7c06
+ Author: Jens Maurer
+ Date: Mon Dec 12 16:25:47 2016 +0100
+
+ [class.temporary] Add paragraph number and split off example into its own paragraph. (#1211)
+
+ commit a8a89d9144a9050b85b8bfe780340a763193a1f4
+ Author: Thomas Köppe
+ Date: Mon Dec 12 14:46:31 2016 +0000
+
+ [pairs.pair, tuple.cnstr] Replace 'The constructor initializes' with just 'Initializes', which is how we say it in many other places. (#1206)
+
+ commit 3c6ba0621a8e23c474f77fbee24b06d76b125dd3
+ Author: Thomas Köppe
+ Date: Mon Dec 12 01:50:27 2016 +0000
+
+ [special] Capitalize notes and examples that are complete sentences.
+
+ commit 3a0d1be2ccd055f6bef1e91ebc2ca7ee19f3638e
+ Author: Thomas Köppe
+ Date: Mon Dec 12 01:33:44 2016 +0000
+
+ [class.cdtor] Clarify presentation of example
+
+ Seperate the hypothetical alternative case from the real code with newlines and describe in irrealis mood.
+
+ commit 33375c726c64c4e602b52269708441f5cdccfa77
+ Author: Sergey Zubkov
+ Date: Sun Dec 11 07:20:28 2016 -0500
+
+ [mem.res.syn] Call polymorphic_allocator a 'class template' (#1209)
+
+ commit fdb5d1a7ed71add105ee5eca4307d9a6a042ba75
+ Author: Sergey Zubkov
+ Date: Sun Dec 11 07:11:28 2016 -0500
+
+ [variant.bad.access] Use 'override' instead of 'virtual' in synopsis (#1208)
+
+ commit edba6d4a097e9de2caa79461341b3c3476941790
+ Author: Thomas Köppe
+ Date: Sat Dec 10 19:50:28 2016 +0000
+
+ [diff.cpp03.special] Use the more correct "call function f" rather than "call function f()" to resolve overfull line and fulfil compulsion for pedantry.
+
+ commit 3c6d91088e58e56e295419efdd47ddc8a4628196
+ Author: Thomas Köppe
+ Date: Sat Dec 10 17:10:54 2016 +0000
+
+ [func.not_fn] Clean-up not_fun
+
+ Use placeholder macros. Reformat class synopsis in our usual style. Reorder private members. Use codeblocks for long descriptions.
+
+ Addresses #693.
+
+ commit 2b17f472d2c1fcfb96f5f9d4f5f7d799c6d336ae
+ Author: Thomas Köppe
+ Date: Sat Dec 10 17:09:25 2016 +0000
+
+ [mem.res.pool.mem] Reorder and reflow do_is_equal descriptions.
+
+ Addresses #693 for that section.
+
+ commit f9ce3d269eb5bd2ffd3bb74f79ba1298da1d83bc
+ Author: Thomas Köppe
+ Date: Sat Dec 10 16:34:41 2016 +0000
+
+ [tuple.helper, variant.helper] Change "specialization of *class*" to "specialization of *template*".
+
+ The containing lines were too long (cf. #693), and the change is a mild increase in pedantic correctness.
+
+ commit faaf054bd237780b3999c4efdbbcc2b6bf88721b
+ Author: Jens Maurer
+ Date: Fri Dec 9 23:32:42 2016 +0100
+
+ [limits] Use 'subnormal number' as defined by IEEE 754-2008 = ISO 60559. (#1203)
+
+ Also add index entries for 'denormalized value' and 'value,
+ denormalized', pointing to 'number, subnormal'.
+
+ Fixes #1017.
+
+ commit 4f182cba568b3f753d2bdeb61c349bd65b8bf241
+ Author: Jens Maurer
+ Date: Thu Dec 8 23:02:33 2016 +0100
+
+ [util.smartptr.shared.atomic] Merge duplicate description items.
+
+ Partially addresses #288.
+
+ commit b22cda3a831508a362930f6eb25d1f839f0f8ea8
+ Author: Jens Maurer
+ Date: Thu Dec 8 22:57:32 2016 +0100
+
+ [alg.lex.comparison] Remove duplicate 'Remarks:' item and comfort lone codeblock
+
+ Partially addresses #288.
+
+ commit faecbe8a6f3db2bd411b64428c1f3345b1677550
+ Author: Johannes Laire
+ Date: Thu Dec 8 15:19:45 2016 +0000
+
+ [rand.req.adapt] Fix syntax error (#1194)
+
+ commit a9159bdbf9b6baa096f2c51d9129cd03431d03bd
+ Author: Eelis
+ Date: Thu Dec 8 16:08:58 2016 +0100
+
+ [numeric.special] Remove redundant 'inline' specifiers in example. (#1192)
+
+ commit ff36dc5f586abb837a3963b1b8815a245bdbc741
+ Author: Johannes Laire
+ Date: Thu Dec 8 10:47:07 2016 +0000
+
+ [depr] Add missing parentheses around bitwise expressions (#1191)
+
+ commit b6d625f215dbac299982094cf54e4fed0999e873
+ Author: Thomas Köppe
+ Date: Thu Dec 8 10:06:47 2016 +0000
+
+ Hyphenate 'implementation-defined' in a few residual cases
+
+ commit 77f36805a4adc0a5d145264fc5e5e6ab11b5e8f2
+ Author: Thomas Köppe
+ Date: Fri Dec 2 02:58:22 2016 +0000
+
+ [dcl.align] Touch up error comments
+
+ commit 6d082aa3bed44e5342e55d19453d9669671063fa
+ Author: Jens Maurer
+ Date: Wed Dec 7 23:07:21 2016 +0100
+
+ [intseq.general] Remove example not quite mirroring a standard function. (#1187)
+
+ Fixes #1176.
+
+ commit 426dd1880198d5aaa51ae189d3e1d3780d3da1ce
+ Author: Jens Maurer
+ Date: Wed Dec 7 22:28:33 2016 +0100
+
+ [containers, alg.transform] Minor presentation fixes. (#1184)
+
+ Harmonize the punctuation in complexity requirements where a definition
+ for N is introduced.
+ Add a missing closing parenthesis.
+ Add a full stop.
+
+ Fixes #191.
+
+ commit ff91738d4f67123fa944a76506826f7a3c14b3e2
+ Author: Jens Maurer
+ Date: Wed Dec 7 21:25:39 2016 +0100
+
+ [class.virtual] Remove awkward 'but'. (#1182)
+
+ Fixes #170.
+
+ commit 4975167baaed59b6b3aab9d93ea14682c45a6217
+ Author: Jens Maurer
+ Date: Wed Dec 7 20:44:25 2016 +0100
+
+ [function.objects] Introduce a new subsection for the synopsis. (#1179)
+
+ Also add a cross-reference from [unord.hash] to the synopsis, which
+ is the only place where the primary template is declared.
+
+ Fixes #192.
+
+ commit d4c17ce01bf7b1419b330e798119b838ab8f1380
+ Author: Jens Maurer
+ Date: Wed Dec 7 20:07:18 2016 +0100
+
+ [pairs.pair] Further harmonize spelling of template parameters for pair. (#1178)
+
+ Fixes #125.
+
+ commit 10ae5c39b0d4065486974c1c80d338b904a9f013
+ Author: Eelis
+ Date: Wed Dec 7 12:13:32 2016 +0100
+
+ Capitalize examples outside sentences. (#1174)
+
+ commit 5301db44da7db8839114f9c032e7fe293da31879
+ Author: Eelis
+ Date: Wed Dec 7 11:25:11 2016 +0100
+
+ Capitalize notes. (#1173)
+
+ commit d2a69983b30ba4a3dec9bece774cb11fe50353c1
+ Author: Thomas Köppe
+ Date: Wed Dec 7 01:37:27 2016 +0000
+
+ [stmt.stmt] Align comments to customary columns and reflow some very narrow comments
+
+ commit 1fe866912ad07ea76353bb08723aad8552620f7c
+ Author: Jens Maurer
+ Date: Wed Dec 7 01:55:54 2016 +0100
+
+ [utility] Harmonize spelling of template parameters for std::pair. (#1172)
+
+ Addresses #125.
+
+ commit 99c6b4c6d08b99b36a10a50127b43ab461fd2f57
+ Author: Thomas Köppe
+ Date: Sat Dec 3 00:43:13 2016 +0000
+
+ [expr] Use same notation for collections of cv-qualification signatures as in [conv.qual]
+
+ commit 2df5c6df7ee8cd884da607897b229cc8e1913ecb
+ Author: Thomas Köppe
+ Date: Tue Nov 29 02:47:55 2016 +0000
+
+ [basic] Reflow comments to be more compact; use math set notation for sets
+
+ commit 28b0897221d9b641ef8439cfd29ef81b7d1f81b6
+ Author: Jens Maurer
+ Date: Fri Dec 2 00:40:17 2016 +0100
+
+ [headers, depr.c.headers] Avoid brittle counts of headers. (#1167)
+
+ Fixes #766.
+
+ commit cf522b9177c01511a8c0b7197d9e48aa2224512d
+ Author: Jens Maurer
+ Date: Thu Dec 1 23:58:40 2016 +0100
+
+ [utilities] Do not use CamelCase for 'BaseCharacteristic'. (#1164)
+
+ This is a regular English phrase used as a technical term.
+
+ Fixes #1154.
+
+ commit 69d8903278277e96779c8435fedad0018fe10ee4
+ Author: Jens Maurer
+ Date: Thu Dec 1 23:52:01 2016 +0100
+
+ [re.regex] Add missing 'multiline' constant. (#1162)
+
+ Fixes #1129.
+
+ commit 19dc0aa5c8b8b53f0bfe17724fb26795c187c10a
+ Author: Richard Smith
+ Date: Fri Oct 21 11:39:17 2016 -0700
+
+ [dcl.init.aggr] Wording simplification. Aggregate elements are only
+ defined for purposes of aggregate initialization; we don't need to
+ repeat that every time we use the term.
+
+ commit cca5257d60abcf9a62f545e9c146fe2c367f843a
+ Author: Johannes Laire
+ Date: Wed Nov 30 00:03:04 2016 +0000
+
+ Move punctuation outside quotation marks according to logical nesting (#1148)
+
+ commit a69d5beeaf1041c064cbad97db9b05a7e6ce079c
+ Author: Thomas Köppe
+ Date: Tue Nov 29 23:57:44 2016 +0000
+
+ [expr.prim.lambda] Move first paragraph below grammar.
+
+ Text before the main grammar needs to be very short; this first paragraph was getting out of hand.
+
+ commit c58e854d79a71d7494c6c1bcf496c6795f10821b
+ Author: Thomas Köppe
+ Date: Tue Nov 29 21:47:05 2016 +0000
+
+ [string.classes] Turn synopsis into numbered subclause
+
+ In pursuit of issue #566.
+
+ commit 30e55475c622cdda9274f5d3af79eae416b650ef
+ Author: Thomas Köppe
+ Date: Tue Nov 29 21:38:41 2016 +0000
+
+ [tuple, variant] Turn synopses into numbered subclauses
+
+ In pursuit of issue #566.
+
+ commit 48efdfe014549e6d116ce12ca427f7df0e0f8c70
+ Author: Thomas Köppe
+ Date: Tue Nov 29 19:58:48 2016 +0000
+
+ [pairs.pair], [tuple.tuple] Tidy up presentation of member functions (order elements consistently; use better index notation)
+
+ Also fixes issue #1117 and partially addresses issue #653.
+
+ commit 807e6f951e19e418cbc379797d1c32e4b8a49dca
+ Author: Johannes Laire
+ Date: Tue Nov 29 12:37:17 2016 -0500
+
+ [library] Capitalize headings
+
+ commit bcd2eb6e3cfd68d90b4b761df8dd0728e4e0629b
+ Author: Thomas Köppe
+ Date: Tue Nov 29 02:52:44 2016 +0000
+
+ [basic.def.odf] Clarify example by adding a variable that actually odr-uses D()
diff --git a/papers/n4640.pdf b/papers/n4640.pdf
new file mode 100644
index 0000000000..e28b707bff
Binary files /dev/null and b/papers/n4640.pdf differ
diff --git a/source/access.tex b/source/access.tex
index f84fd8b4d0..77ccc72669 100644
--- a/source/access.tex
+++ b/source/access.tex
@@ -116,8 +116,9 @@
the class appearing outside the class's \grammarterm{member-specification}{.}
\begin{note} This access also applies to implicit references to constructors,
conversion functions, and destructors. \end{note}
-\begin{example}
+\pnum
+\begin{example}
\begin{codeblock}
class A {
typedef int I; // private member
@@ -140,7 +141,6 @@
struct D: A::B, A { };
\end{codeblock}
-\pnum
Here, all the uses of
\tcode{A::I}
are well-formed because
@@ -165,7 +165,7 @@
\end{example}
\pnum
-\indextext{argument!access checking~and default}%
+\indextext{argument!access checking and default}%
\indextext{access control!default argument}%
The names in a default argument~(\ref{dcl.fct.default}) are
bound at the point of declaration, and access is checked at that
@@ -187,12 +187,12 @@
template
class D : public U { };
-D >* d; // access error, C::TT is protected
+D >* d; // access error, \tcode{C::TT} is protected
\end{codeblock}
\end{example}
\rSec1[class.access.spec]{Access specifiers}%
-\indextext{access~specifier}
+\indextext{access specifier}
\pnum
Member declarations can be labeled by an
@@ -279,11 +279,11 @@
\end{example}
\rSec1[class.access.base]{Accessibility of base classes and base class members}%
-\indextext{access control!base~class}%
-\indextext{access~specifier}%
-\indextext{base~class!\idxcode{private}}%
-\indextext{base~class!\idxcode{protected}}%
-\indextext{base~class!\idxcode{public}}
+\indextext{access control!base class}%
+\indextext{access specifier}%
+\indextext{base class!\idxcode{private}}%
+\indextext{base class!\idxcode{protected}}%
+\indextext{base class!\idxcode{public}}
\pnum
If a class is declared to be a base class (Clause~\ref{class.derived}) for another class using the
@@ -336,15 +336,15 @@
\begin{example}
\begin{codeblock}
-class B { /* ... */ };
-class D1 : private B { /* ... */ };
-class D2 : public B { /* ... */ };
-class D3 : B { /* ... */ }; // \tcode{B} private by default
-struct D4 : public B { /* ... */ };
-struct D5 : private B { /* ... */ };
-struct D6 : B { /* ... */ }; // \tcode{B} public by default
-class D7 : protected B { /* ... */ };
-struct D8 : protected B { /* ... */ };
+class B { @\commentellip@ };
+class D1 : private B { @\commentellip@ };
+class D2 : public B { @\commentellip@ };
+class D3 : B { @\commentellip@ }; // \tcode{B} private by default
+struct D4 : public B { @\commentellip@ };
+struct D5 : private B { @\commentellip@ };
+struct D6 : B { @\commentellip@ }; // \tcode{B} public by default
+class D7 : protected B { @\commentellip@ };
+struct D8 : protected B { @\commentellip@ };
\end{codeblock}
Here
@@ -464,9 +464,8 @@
class N: private S {
void f() {
- B* p = this; // OK because class \tcode{S} satisfies the fourth condition
- // above: \tcode{B} is a base class of \tcode{N} accessible in \tcode{f()} because
- // \tcode{B} is an accessible base class of \tcode{S} and \tcode{S} is an accessible
+ B* p = this; // OK because class \tcode{S} satisfies the fourth condition above: \tcode{B} is a base class of \tcode{N}
+ // accessible in \tcode{f()} because \tcode{B} is an accessible base class of \tcode{S} and \tcode{S} is an accessible
// base class of \tcode{N}.
}
};
@@ -570,8 +569,7 @@
};
class B : public A { };
void f(B* p) {
- p->i = 1; // OK: \tcode{B*} can be implicitly converted to \tcode{A*},
- // and \tcode{f} has access to \tcode{i} in \tcode{A}
+ p->i = 1; // OK: \tcode{B*} can be implicitly converted to \tcode{A*}, and \tcode{f} has access to \tcode{i} in \tcode{A}
}
\end{codeblock}
\end{example}
@@ -602,11 +600,11 @@
Such declarations give special access rights to the friends, but they
do not make the nominated friends members of the befriending class.
\begin{example}
-the following example illustrates the differences between
+The following example illustrates the differences between
members and friends:
-\indextext{friend function!member~function~and}%
+\indextext{friend function!member function and}%
\indextext{example!friend function}%
-\indextext{example!member~function}%
+\indextext{example!member function}%
\begin{codeblock}
class X {
@@ -628,7 +626,7 @@
\end{example}
\pnum
-\indextext{friend!class access~and}%
+\indextext{friend!class access and}%
Declaring a class to be a friend implies that the names of private and
protected members from the class granting friendship can be accessed in the
\grammarterm{base-specifier}{s} and member declarations of the befriended
@@ -640,10 +638,10 @@
friend class X;
};
-struct X : A::B { // OK: \tcode{A::B} accessible to friend
- A::B mx; // OK: \tcode{A::B} accessible to member of friend
+struct X : A::B { // OK: \tcode{A::B} accessible to friend
+ A::B mx; // OK: \tcode{A::B} accessible to member of friend
class Y {
- A::B my; // OK: \tcode{A::B} accessible to nested member of friend
+ A::B my; // OK: \tcode{A::B} accessible to nested member of friend
};
};
\end{codeblock}
@@ -657,11 +655,11 @@
};
class Y {
- int v[X::a]; // OK, \tcode{Y} is a friend of \tcode{X}
+ int v[X::a]; // OK, \tcode{Y} is a friend of \tcode{X}
};
class Z {
- int v[X::a]; // error: \tcode{X::a} is private
+ int v[X::a]; // error: \tcode{X::a} is private
};
\end{codeblock}
\end{example}
@@ -669,7 +667,7 @@
A class shall not be defined in a friend declaration. \begin{example}
\begin{codeblock}
class A {
- friend class B { }; // error: cannot define class in friend declaration
+ friend class B { }; // error: cannot define class in friend declaration
};
\end{codeblock}
\end{example}
@@ -696,32 +694,32 @@
typedef C Ct;
class X1 {
- friend C; // OK: \tcode{class C} is a friend
+ friend C; // OK: \tcode{class C} is a friend
};
class X2 {
- friend Ct; // OK: \tcode{class C} is a friend
- friend D; // error: no type-name \tcode{D} in scope
- friend class D; // OK: elaborated-type-specifier declares new class
+ friend Ct; // OK: \tcode{class C} is a friend
+ friend D; // error: no type-name \tcode{D} in scope
+ friend class D; // OK: elaborated-type-specifier declares new class
};
template class R {
friend T;
};
-R rc; // \tcode{class C} is a friend of \tcode{R}
-R Ri; // OK: \tcode{"friend int;"} is ignored
+R rc; // \tcode{class C} is a friend of \tcode{R}
+R Ri; // OK: \tcode{"friend int;"} is ignored
\end{codeblock}
\end{example}
\pnum
-\indextext{friend function!linkage~of}%
+\indextext{friend function!linkage of}%
A function first declared in a friend declaration
has the linkage of the namespace of which it is a member~(\ref{basic.link}).
Otherwise, the function retains its previous linkage~(\ref{dcl.stc}).
\pnum
-\indextext{declaration!overloaded~name~and \tcode{friend}}%
+\indextext{declaration!overloaded name and \tcode{friend}}%
When a
\tcode{friend}
declaration refers to an overloaded name or operator, only the function specified
@@ -773,7 +771,7 @@
of a friend declaration.
\pnum
-\indextext{friend!access~specifier~and}%
+\indextext{friend!access specifier and}%
A name nominated by a friend declaration shall be accessible in the scope of the
class containing the friend declaration.
The meaning of the friend declaration is the same whether the friend declaration
@@ -786,7 +784,7 @@
\grammarterm{member-specification}.
\pnum
-\indextext{friend!inheritance~and}%
+\indextext{friend!inheritance and}%
Friendship is neither inherited nor transitive.
\begin{example}
@@ -802,23 +800,21 @@
class C {
void f(A* p) {
- p->a++; // error: \tcode{C} is not a friend of \tcode{A}
- // despite being a friend of a friend
+ p->a++; // error: \tcode{C} is not a friend of \tcode{A} despite being a friend of a friend
}
};
class D : public B {
void f(A* p) {
- p->a++; // error: \tcode{D} is not a friend of \tcode{A}
- // despite being derived from a friend
+ p->a++; // error: \tcode{D} is not a friend of \tcode{A} despite being derived from a friend
}
};
\end{codeblock}
\end{example}
\pnum
-\indextext{local~class!friend}%
-\indextext{friend!local~class~and}%
+\indextext{local class!friend}%
+\indextext{friend!local class and}%
If a friend declaration appears in a local class~(\ref{class.local}) and the
name specified is an unqualified name, a prior declaration is looked
up without considering scopes that are outside the innermost enclosing
@@ -890,8 +886,7 @@
pb->i = 1; // ill-formed
p1->i = 2; // ill-formed
p2->i = 3; // OK (access through a \tcode{D2})
- p2->B::i = 4; // OK (access through a \tcode{D2}, even though
- // naming class is \tcode{B})
+ p2->B::i = 4; // OK (access through a \tcode{D2}, even though naming class is \tcode{B})
int B::* pmi_B = &B::i; // ill-formed
int B::* pmi_B2 = &D2::i; // OK (type of \tcode{\&D2::i} is \tcode{int B::*})
B::j = 5; // ill-formed (not a friend of naming class \tcode{B})
@@ -941,8 +936,7 @@
B* pb = &d;
D* pd = &d;
- pb->f(); // OK: \tcode{B::f()} is public,
- // \tcode{D::f()} is invoked
+ pb->f(); // OK: \tcode{B::f()} is public, \tcode{D::f()} is invoked
pd->f(); // error: \tcode{D::f()} is private
}
\end{codeblock}
@@ -974,7 +968,6 @@
};
\end{codeblock}
-\pnum
Since
\tcode{W::f()}
is available to
@@ -993,7 +986,7 @@
The members of an enclosing class have no special access to members of a nested
class; the usual access rules (Clause~\ref{class.access}) shall be obeyed.
\begin{example}
-\indextext{example!nested~class definition}%
+\indextext{example!nested class definition}%
\begin{codeblock}
class E {
diff --git a/source/algorithms.tex b/source/algorithms.tex
index c8ee2fa8fb..9c74d5dfbb 100644
--- a/source/algorithms.tex
+++ b/source/algorithms.tex
@@ -22,7 +22,8 @@
\ref{alg.c.library} & C library algorithms & \tcode{} \\ \hline
\end{libsumtab}
-\synopsis{Header \tcode{} synopsis}
+\rSec1[algorithm.syn]{Header \tcode{} synopsis}
+\indextext{\idxhdr{algorithm}}%
\indexlibrary{\idxhdr{algorithm}}%
\begin{codeblock}
@@ -286,7 +287,7 @@
template
ForwardIterator search(ForwardIterator first, ForwardIterator last,
- const Searcher &searcher);
+ const Searcher& searcher);
// \ref{alg.modifying.operations}, modifying sequence operations
// \ref{alg.copy}, copy
@@ -1023,6 +1024,7 @@
}
\end{codeblock}
+\rSec1[algorithms.requirements]{Algorithms requirements}
\pnum
All of the algorithms are separated from the particular implementations of data structures and are
parameterized by iterator types.
@@ -1196,12 +1198,13 @@
\rSec1[algorithms.parallel]{Parallel algorithms}
+\pnum
This section describes components that \Cpp programs may use to perform
operations on containers and other sequences in parallel.
\rSec2[algorithms.parallel.defns]{Terms and definitions}
\pnum
-A \defn{parallel algorithm} is a function template listed in this standard with
+A \defn{parallel algorithm} is a function template listed in this International Standard with
a template parameter named \tcode{ExecutionPolicy}.
\pnum
@@ -1351,7 +1354,7 @@
algorithms.
\begin{note}
Implementations must ensure that internal synchronization inside standard
-library routines does not prevent forward progress when those routines are
+library functions does not prevent forward progress when those functions are
executed by threads of execution with weakly parallel forward progress guarantees.
\end{note}
\begin{example}
@@ -1571,8 +1574,10 @@
If \tcode{f} returns a result, the result is ignored.
\pnum
-\realnotes Does not return a copy of its \tcode{Function} parameter, since
+\begin{note}
+Does not return a copy of its \tcode{Function} parameter, since
parallelization may not permit efficient state accumulation.
+\end{note}
\end{itemdescr}
\indexlibrary{\idxcode{for_each_n}}%
@@ -2280,7 +2285,6 @@
OutputIterator result);
\end{itemdecl}
-
\begin{itemdescr}
\pnum
\effects For each non-negative integer
@@ -2304,7 +2308,6 @@
OutputIterator result, Predicate pred);
\end{itemdecl}
-
\begin{itemdescr}
\pnum
\requires The ranges \range{first}{last} and \range{result}{result + (last - first)} shall not overlap.
@@ -2323,7 +2326,6 @@
\remarks Stable~(\ref{algorithm.stable}).
\end{itemdescr}
-
\indexlibrary{\idxcode{copy_backward}}%
\begin{itemdecl}
template
@@ -2373,11 +2375,9 @@
\indexlibrary{\idxcode{move}!algorithm}%
\begin{itemdecl}
template
- OutputIterator move(InputIterator first, InputIterator last,
- OutputIterator result);
+ OutputIterator move(InputIterator first, InputIterator last, OutputIterator result);
\end{itemdecl}
-
\begin{itemdescr}
\pnum
\requires
@@ -2409,8 +2409,8 @@
\indexlibrary{\idxcode{move}!algorithm}%
\begin{itemdecl}
template
- OutputIterator move(ExecutionPolicy&& policy, InputIterator first, InputIterator last,
- OutputIterator result);
+ OutputIterator move(ExecutionPolicy&& policy,
+ InputIterator first, InputIterator last, OutputIterator result);
\end{itemdecl}
\begin{itemdescr}
@@ -2422,7 +2422,7 @@
\effects Moves elements in the range \range{first}{last} into
the range \range{result}{result + (last - first)}.
For each non-negative integer \tcode{n < (last - first)},
-performs \tcode{*(result + n) = std::move(\linebreak{}*(first + n))}.
+performs \tcode{*(result + n) = std::\brk{}move(*(first + n))}.
\pnum
\returns \tcode{result + (last - first)}.
@@ -2440,7 +2440,6 @@
BidirectionalIterator2 result);
\end{itemdecl}
-
\begin{itemdescr}
\pnum
\requires
@@ -2476,7 +2475,7 @@
assignments.
\end{itemdescr}
-\rSec2[alg.swap]{swap}
+\rSec2[alg.swap]{Swap}
\indexlibrary{\idxcode{swap_ranges}}%
\begin{itemdecl}
@@ -2491,7 +2490,6 @@
ForwardIterator2 first2);
\end{itemdecl}
-
\begin{itemdescr}
\pnum
\requires
@@ -2588,7 +2586,7 @@
\range{result}{result + (last1 - first1)}
a new
corresponding value equal to
-\tcode{op(*(first1 + (i - result))}
+\tcode{op(*(first1 + (i - result)))}
or
\tcode{binary_op(*(first1 + (i - result)), *(first2 + (i - result)))}.
@@ -2876,10 +2874,12 @@
applications of the corresponding predicate.
\pnum
-\realnote each element in the range \range{ret}{last}, where \tcode{ret} is
+\begin{note}
+Each element in the range \range{ret}{last}, where \tcode{ret} is
the returned value, has a valid but unspecified state, because the algorithms
can eliminate elements by moving from elements that were originally
in that range.
+\end{note}
\end{itemdescr}
\indexlibrary{\idxcode{remove_copy}}%
@@ -3342,171 +3342,6 @@
\end{itemdescr}
-\rSec2[alg.partitions]{Partitions}
-
-\indexlibrary{\idxcode{is_partitioned}}%
-\begin{itemdecl}
-template
- bool is_partitioned(InputIterator first, InputIterator last, Predicate pred);
-template
- bool is_partitioned(ExecutionPolicy&& exec,
- InputIterator first, InputIterator last, Predicate pred);
-\end{itemdecl}
-
-\begin{itemdescr}
-\pnum
-\requires \tcode{InputIterator}'s value type shall be convertible to \tcode{Predicate}'s argument type.
-
-\pnum
-\returns \tcode{true} if
-\range{first}{last} is empty or if
-\range{first}{last} is partitioned by \tcode{pred}, i.e. if all elements that satisfy \tcode{pred} appear before those that do not.
-
-\pnum
-\complexity Linear. At most \tcode{last - first} applications of \tcode{pred}.
-\end{itemdescr}
-
-\indexlibrary{\idxcode{partition}}%
-\begin{itemdecl}
-template
- ForwardIterator
- partition(ForwardIterator first, ForwardIterator last, Predicate pred);
-template
- ForwardIterator
- partition(ExecutionPolicy&& exec,
- ForwardIterator first, ForwardIterator last, Predicate pred);
-\end{itemdecl}
-
-\begin{itemdescr}
-\pnum
-\requires
-\tcode{ForwardIterator} shall satisfy the requirements of
-\tcode{ValueSwappable}~(\ref{swappable.requirements}).
-
-\pnum
-\effects Places all the elements in the range \range{first}{last} that satisfy \tcode{pred} before all the elements that do not satisfy it.
-
-\pnum
-\returns An iterator \tcode{i} such that for every iterator \tcode{j} in the range
-\range{first}{i} \tcode{pred(*j) != false}, and for every iterator \tcode{k} in the
-range \range{i}{last}, \tcode{pred(*k) == false}.
-
-\pnum
-\complexity If \tcode{ForwardIterator} meets the requirements for a \tcode{BidirectionalIterator}, at most
-\tcode{(last - first) / 2} swaps are done; otherwise at most \tcode{last - first} swaps
-are done. Exactly \tcode{last - first} applications of the predicate are done.
-\end{itemdescr}
-
-\indexlibrary{\idxcode{stable_partition}}%
-\begin{itemdecl}
-template
- BidirectionalIterator
- stable_partition(BidirectionalIterator first, BidirectionalIterator last,
- Predicate pred);
-template
- BidirectionalIterator
- stable_partition(ExecutionPolicy&& exec,
- BidirectionalIterator first, BidirectionalIterator last,
- Predicate pred);
-\end{itemdecl}
-
-\begin{itemdescr}
-\pnum
-\requires
-\tcode{BidirectionalIterator} shall satisfy the requirements of
-\tcode{ValueSwappable}~(\ref{swappable.requirements}). The type
-of \tcode{*first} shall satisfy the requirements of
-\tcode{MoveConstructible} (Table~\ref{tab:moveconstructible}) and of
-\tcode{MoveAssignable} (Table~\ref{tab:moveassignable}).
-
-\pnum
-\effects
-Places all the elements in the range
-\range{first}{last}
-that satisfy \tcode{pred} before all the
-elements that do not satisfy it.
-
-\pnum
-\returns
-An iterator
-\tcode{i}
-such that for every iterator
-\tcode{j}
-in the range
-\range{first}{i},
-\tcode{pred(*j) != false},
-and for every iterator
-\tcode{k}
-in the range
-\range{i}{last},
-\tcode{pred(*k) == false}.
-The relative order of the elements in both groups is preserved.
-
-\pnum
-\complexity
-At most $N \log(N)$ swaps, where $N = \tcode{last - first}$,
-but only \bigoh{N} swaps if there is enough extra memory.
-Exactly
-\tcode{last - first}
-applications of the predicate.
-\end{itemdescr}
-
-\indexlibrary{\idxcode{partition_copy}}%
-\begin{itemdecl}
-template
- pair
- partition_copy(InputIterator first, InputIterator last,
- OutputIterator1 out_true, OutputIterator2 out_false,
- Predicate pred);
-template
- pair
- partition_copy(ExecutionPolicy&& exec,
- InputIterator first, InputIterator last,
- OutputIterator1 out_true, OutputIterator2 out_false,
- Predicate pred);
-\end{itemdecl}
-
-
-\begin{itemdescr}
-\pnum
-\requires \tcode{InputIterator}'s value type shall be \tcode{CopyAssignable}, and shall be
-writable~(\ref{iterator.requirements.general}) to the \tcode{out_true} and \tcode{out_false} \tcode{OutputIterator}s, and shall be
-convertible to \tcode{Predicate}'s argument type. The input range shall not overlap with
-either of the output ranges.
-
-\pnum
-\effects For each iterator \tcode{i} in \range{first}{last}, copies \tcode{*i} to the output range beginning with \tcode{out_true} if \tcode{pred(*i)} is \tcode{true}, or to the output range beginning with \tcode{out_false} otherwise.
-
-\pnum
-\returns A pair \tcode{p} such that \tcode{p.first} is the end of the output range beginning at \tcode{out_true} and \tcode{p.second} is the end of the output range beginning at \tcode{out_false}.
-
-\pnum
-\complexity Exactly \tcode{last - first} applications of \tcode{pred}.
-\end{itemdescr}
-
-\indexlibrary{\idxcode{partition_point}}%
-\begin{itemdecl}
-template
- ForwardIterator partition_point(ForwardIterator first,
- ForwardIterator last,
- Predicate pred);
-\end{itemdecl}
-
-
-\begin{itemdescr}
-\pnum
-\requires \tcode{ForwardIterator}'s value type shall be convertible to \tcode{Predicate}'s argument type. \range{first}{last} shall be partitioned by \tcode{pred}, i.e. all elements that satisfy \tcode{pred} shall appear before those that do not.
-
-\pnum
-\returns An iterator \tcode{mid} such that \tcode{all_of(first, mid, pred)} and \tcode{none_of(mid, last, pred)} are both \tcode{true}.
-
-\pnum
-\complexity \bigoh{\log(\tcode{last - first})} applications of \tcode{pred}.
-\end{itemdescr}
-
-
\rSec1[alg.sorting]{Sorting and related operations}
\pnum
@@ -4204,6 +4039,170 @@
comparisons.
\end{itemdescr}
+\rSec2[alg.partitions]{Partitions}
+
+\indexlibrary{\idxcode{is_partitioned}}%
+\begin{itemdecl}
+template
+ bool is_partitioned(InputIterator first, InputIterator last, Predicate pred);
+template
+ bool is_partitioned(ExecutionPolicy&& exec,
+ InputIterator first, InputIterator last, Predicate pred);
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\requires \tcode{InputIterator}'s value type shall be convertible to \tcode{Predicate}'s argument type.
+
+\pnum
+\returns \tcode{true} if
+\range{first}{last} is empty or if
+\range{first}{last} is partitioned by \tcode{pred}, i.e. if all elements that satisfy \tcode{pred} appear before those that do not.
+
+\pnum
+\complexity Linear. At most \tcode{last - first} applications of \tcode{pred}.
+\end{itemdescr}
+
+\indexlibrary{\idxcode{partition}}%
+\begin{itemdecl}
+template
+ ForwardIterator
+ partition(ForwardIterator first, ForwardIterator last, Predicate pred);
+template
+ ForwardIterator
+ partition(ExecutionPolicy&& exec,
+ ForwardIterator first, ForwardIterator last, Predicate pred);
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\requires
+\tcode{ForwardIterator} shall satisfy the requirements of
+\tcode{ValueSwappable}~(\ref{swappable.requirements}).
+
+\pnum
+\effects Places all the elements in the range \range{first}{last} that satisfy \tcode{pred} before all the elements that do not satisfy it.
+
+\pnum
+\returns An iterator \tcode{i} such that for every iterator \tcode{j} in the range
+\range{first}{i} \tcode{pred(*j) != false}, and for every iterator \tcode{k} in the
+range \range{i}{last}, \tcode{pred(*k) == false}.
+
+\pnum
+\complexity If \tcode{ForwardIterator} meets the requirements for a \tcode{BidirectionalIterator}, at most
+\tcode{(last - first) / 2} swaps are done; otherwise at most \tcode{last - first} swaps
+are done. Exactly \tcode{last - first} applications of the predicate are done.
+\end{itemdescr}
+
+\indexlibrary{\idxcode{stable_partition}}%
+\begin{itemdecl}
+template
+ BidirectionalIterator
+ stable_partition(BidirectionalIterator first, BidirectionalIterator last,
+ Predicate pred);
+template
+ BidirectionalIterator
+ stable_partition(ExecutionPolicy&& exec,
+ BidirectionalIterator first, BidirectionalIterator last,
+ Predicate pred);
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\requires
+\tcode{BidirectionalIterator} shall satisfy the requirements of
+\tcode{ValueSwappable}~(\ref{swappable.requirements}). The type
+of \tcode{*first} shall satisfy the requirements of
+\tcode{MoveConstructible} (Table~\ref{tab:moveconstructible}) and of
+\tcode{MoveAssignable} (Table~\ref{tab:moveassignable}).
+
+\pnum
+\effects
+Places all the elements in the range
+\range{first}{last}
+that satisfy \tcode{pred} before all the
+elements that do not satisfy it.
+
+\pnum
+\returns
+An iterator
+\tcode{i}
+such that for every iterator
+\tcode{j}
+in the range
+\range{first}{i},
+\tcode{pred(*j) != false},
+and for every iterator
+\tcode{k}
+in the range
+\range{i}{last},
+\tcode{pred(*k) == false}.
+The relative order of the elements in both groups is preserved.
+
+\pnum
+\complexity
+At most $N \log(N)$ swaps, where $N = \tcode{last - first}$,
+but only \bigoh{N} swaps if there is enough extra memory.
+Exactly
+\tcode{last - first}
+applications of the predicate.
+\end{itemdescr}
+
+\indexlibrary{\idxcode{partition_copy}}%
+\begin{itemdecl}
+template
+ pair
+ partition_copy(InputIterator first, InputIterator last,
+ OutputIterator1 out_true, OutputIterator2 out_false,
+ Predicate pred);
+template
+ pair
+ partition_copy(ExecutionPolicy&& exec,
+ InputIterator first, InputIterator last,
+ OutputIterator1 out_true, OutputIterator2 out_false,
+ Predicate pred);
+\end{itemdecl}
+
+
+\begin{itemdescr}
+\pnum
+\requires \tcode{InputIterator}'s value type shall be \tcode{CopyAssignable}, and shall be
+writable~(\ref{iterator.requirements.general}) to the \tcode{out_true} and \tcode{out_false} \tcode{OutputIterator}s, and shall be
+convertible to \tcode{Predicate}'s argument type. The input range shall not overlap with
+either of the output ranges.
+
+\pnum
+\effects For each iterator \tcode{i} in \range{first}{last}, copies \tcode{*i} to the output range beginning with \tcode{out_true} if \tcode{pred(*i)} is \tcode{true}, or to the output range beginning with \tcode{out_false} otherwise.
+
+\pnum
+\returns A pair \tcode{p} such that \tcode{p.first} is the end of the output range beginning at \tcode{out_true} and \tcode{p.second} is the end of the output range beginning at \tcode{out_false}.
+
+\pnum
+\complexity Exactly \tcode{last - first} applications of \tcode{pred}.
+\end{itemdescr}
+
+\indexlibrary{\idxcode{partition_point}}%
+\begin{itemdecl}
+template
+ ForwardIterator partition_point(ForwardIterator first,
+ ForwardIterator last,
+ Predicate pred);
+\end{itemdecl}
+
+
+\begin{itemdescr}
+\pnum
+\requires \tcode{ForwardIterator}'s value type shall be convertible to \tcode{Predicate}'s argument type. \range{first}{last} shall be partitioned by \tcode{pred}, i.e. all elements that satisfy \tcode{pred} shall appear before those that do not.
+
+\pnum
+\returns An iterator \tcode{mid} such that \tcode{all_of(first, mid, pred)} and \tcode{none_of(mid, last, pred)} are both \tcode{true}.
+
+\pnum
+\complexity \bigoh{\log(\tcode{last - first})} applications of \tcode{pred}.
+\end{itemdescr}
+
\rSec2[alg.merge]{Merge}
\indexlibrary{\idxcode{merge}}%
@@ -4240,7 +4239,7 @@
\begin{itemdescr}
\pnum
\requires The ranges \range{first1}{last1} and \range{first2}{last2} shall be
-sorted with respect to \tcode{operator<} or \tcode{comp}.
+sorted with respect to \tcode{oper\-ator<} or \tcode{comp}.
The resulting range shall not overlap with either of the original ranges.
\pnum
@@ -4671,7 +4670,7 @@
or a new element added by
\tcode{push_heap()},
in
-$\mathcal{O}(\log(N))$
+\bigoh{\log(N)}
time.
\end{itemize}
@@ -4876,7 +4875,10 @@
\begin{itemdescr}
\pnum
-\returns \tcode{is_heap_until(std::forward(exec), first, last, comp) == last}
+\returns
+\begin{codeblock}
+is_heap_until(std::forward(exec), first, last, comp) == last
+\end{codeblock}
\end{itemdescr}
@@ -5272,7 +5274,7 @@
\pnum
\remarks
If two sequences have the same number of elements and their corresponding
-elements are equivalent, then neither sequence is lexicographically
+elements (if any) are equivalent, then neither sequence is lexicographically
less than the other.
If one sequence is a prefix of the other, then the shorter sequence is
lexicographically less than the longer sequence.
@@ -5280,6 +5282,9 @@
result as the comparison of the first corresponding pair of
elements that are not equivalent.
+\pnum
+\begin{example}
+The following sample implementation satisfies these requirements:
\begin{codeblock}
for ( ; first1 != last1 && first2 != last2 ; ++first1, (void) ++first2) {
if (*first1 < *first2) return true;
@@ -5287,10 +5292,12 @@
}
return first1 == last1 && first2 != last2;
\end{codeblock}
+\end{example}
\pnum
-\remarks\ An empty sequence is lexicographically less than any non-empty sequence, but
+\begin{note} An empty sequence is lexicographically less than any non-empty sequence, but
not less than any empty sequence.
+\end{note}
\end{itemdescr}
@@ -5384,6 +5391,7 @@
\pnum
\indextext{\idxhdr{cstdlib}}%
+\indexlibrary{\idxhdr{cstdlib}}%
\begin{note}
The header \tcode{}~(\ref{cstdlib.syn})
declares the functions described in this subclause.
diff --git a/source/atomics.tex b/source/atomics.tex
index 1b19da5af8..5be09daa19 100644
--- a/source/atomics.tex
+++ b/source/atomics.tex
@@ -28,6 +28,7 @@
\rSec1[atomics.syn]{Header \tcode{} synopsis}
+\indextext{\idxhdr{atomic}}%
\indexlibrary{\idxhdr{atomic}}%
\begin{codeblock}
namespace std {
@@ -153,7 +154,7 @@
@\placeholdernc{integral}@ atomic_fetch_xor_explicit(volatile @\placeholder{atomic-integral}@*@\itcorr[-1]@, @\placeholdernc{integral}@, memory_order) noexcept;
@\placeholdernc{integral}@ atomic_fetch_xor_explicit(@\placeholder{atomic-integral}@*@\itcorr[-1]@, @\placeholdernc{integral}@, memory_order) noexcept;
- // \ref{atomics.types.operations.pointer}, partial specializations for pointers
+ // \ref{atomics.types.operations.pointer}, non-member overloads for atomic
template
T* atomic_fetch_add(volatile atomic*, ptrdiff_t) noexcept;
template
@@ -796,8 +797,8 @@
\indexlibrary{\idxcode{atomic}}%
\pnum
-The implementation shall provide the function template specializations
-identified as ``partial specializations for pointers'' in~\ref{atomics.syn}.
+The implementation shall provide the function templates identified as
+``non-member overloads for atomic'' in~\ref{atomics.syn}.
\rSec2[atomics.types.operations.req]{Requirements for operations on atomic types}
@@ -1368,7 +1369,7 @@
Operations on an object of type \tcode{atomic_flag} shall be lock-free. \begin{note} Hence
the operations should also be address-free. No other type requires lock-free operations,
so the \tcode{atomic_flag} type is the minimum hardware-implemented type needed to
-conform to this International standard. The remaining types can be emulated with
+conform to this International Standard. The remaining types can be emulated with
\tcode{atomic_flag}, though with less than ideal properties. \end{note}
\pnum
@@ -1496,11 +1497,11 @@
signal handler executed in the same thread.
\pnum
-\realnote \tcode{atomic_signal_fence} can be used to specify the order in which actions
+\begin{note}
+\tcode{atomic_signal_fence} can be used to specify the order in which actions
performed by the thread become visible to the signal handler.
-
-\pnum
-\realnote compiler optimizations and reorderings of loads and stores are inhibited in
+Compiler optimizations and reorderings of loads and stores are inhibited in
the same way as with \tcode{atomic_thread_fence}, but the hardware fence instructions
that \tcode{atomic_thread_fence} would have inserted are not emitted.
+\end{note}
\end{itemdescr}
diff --git a/source/basic.tex b/source/basic.tex
index b55f567c0e..1692459c63 100644
--- a/source/basic.tex
+++ b/source/basic.tex
@@ -23,7 +23,7 @@
\pnum
\indextext{type}%
\indextext{object}%
-\indextext{storage~class}%
+\indextext{storage class}%
\indextext{scope}%
\indextext{linkage}%
\indextext{region!declarative}%
@@ -83,7 +83,7 @@
\rSec1[basic.def]{Declarations and definitions}
\pnum
-\indextext{declaration!definition~versus}%
+\indextext{declaration!definition versus}%
\indextext{declaration}%
\indextext{declaration!name}%
A declaration (Clause~\ref{dcl.dcl}) may introduce
@@ -127,11 +127,11 @@
and the variable was defined within the class with the \tcode{constexpr}
specifier (this usage is deprecated; see \ref{depr.static_constexpr}),
\item
-\indextext{declaration!class~name}%
+\indextext{declaration!class name}%
it is a class name declaration~(\ref{class.name}),
\item
it is an
-\indextext{declaration!opaque~enum}%
+\indextext{declaration!opaque enum}%
\grammarterm{opaque-enum-declaration}~(\ref{dcl.enum}),
\item
it is a
@@ -171,7 +171,7 @@
an explicit specialization~(\ref{temp.expl.spec}) whose
\grammarterm{declaration} is not a definition.
\end{itemize}
-\begin{example} all but one of the following are definitions:
+\begin{example} All but one of the following are definitions:
\indextext{example!definition}%
\begin{codeblock}
int a; // defines \tcode{a}
@@ -213,7 +213,7 @@
copy assignment operator~(\ref{class.copy}),
move assignment operator~(\ref{class.copy}),
or destructor~(\ref{class.dtor}) member functions. \end{note}
-\begin{example} given
+\begin{example} Given
\begin{codeblock}
#include
@@ -261,7 +261,7 @@
\indextext{function!definition}%
\indextext{class!definition}%
\indextext{enumerator!definition}%
-\indextext{one-definition~rule|(}%
+\indextext{one-definition rule|(}%
\rSec1[basic.def.odr]{One-definition rule}
\pnum
@@ -306,8 +306,7 @@
struct S { static const int x = 0; };
const int &f(const int &r);
int n = b ? (1, S::x) // \tcode{S::x} is not odr-used here
- : f(S::x); // \tcode{S::x} is odr-used here, so
- // a definition is required
+ : f(S::x); // \tcode{S::x} is odr-used here, so a definition is required
\end{codeblock}
\end{example}
\end{note}
@@ -376,7 +375,7 @@
\indextext{type!incomplete}%
Exactly one definition of a class is required in a translation unit if
the class is used in a way that requires the class type to be complete.
-\begin{example} the following complete translation unit is well-formed,
+\begin{example} The following complete translation unit is well-formed,
even though it never defines \tcode{X}:
\begin{codeblock}
@@ -392,7 +391,7 @@
\item an object of type \tcode{T} is defined~(\ref{basic.def}), or
\item a non-static class data member of type \tcode{T} is
declared~(\ref{class.mem}), or
-\item \tcode{T} is used as the object type or array element type in a
+\item \tcode{T} is used as the allocated type or array element type in a
\grammarterm{new-expression}~(\ref{expr.new}), or
\item an lvalue-to-rvalue conversion is applied to
a glvalue referring
@@ -401,7 +400,7 @@
type \tcode{T} (Clause~\ref{conv}, \ref{expr.type.conv},
\ref{expr.dynamic.cast}, \ref{expr.static.cast}, \ref{expr.cast}), or
\item an expression that is not a null pointer constant, and has type
-other than \cv{} \tcode{void*}, is converted to the type pointer to \tcode{T}
+other than \cv{}~\tcode{void*}, is converted to the type pointer to \tcode{T}
or reference to \tcode{T} using a standard conversion
(Clause~\ref{conv}), a \tcode{dynamic_cast}~(\ref{expr.dynamic.cast}) or
a \tcode{static_cast}~(\ref{expr.static.cast}), or
@@ -450,7 +449,7 @@
\begin{itemize}
\item has the same literal type in all definitions of \tcode{D},
\item is initialized with a constant expression~(\ref{expr.const}),
-\item is not odr-used, and
+\item is not odr-used in any definition of \tcode{D}, and
\item has the same value in all definitions of \tcode{D},
\end{itemize}
or
@@ -495,7 +494,7 @@
class D {
X x = 0;
};
-D d2; // \tcode{X(int, int)} called by \tcode{D()}
+D d1; // \tcode{X(int, int)} called by \tcode{D()}
// translation unit 2:
struct X {
@@ -505,9 +504,9 @@
X::X(int, int = 0, int = 0) { }
class D {
X x = 0;
-}; // \tcode{X(int, int, int)} called by \tcode{D()};
- // \tcode{D()}'s implicit definition
- // violates the ODR
+};
+D d2; // \tcode{X(int, int, int)} called by \tcode{D()};
+ // \tcode{D()}'s implicit definition violates the ODR
\end{codeblock}
\end{example}
\end{itemize}
@@ -520,7 +519,7 @@
as if there were a single definition of \tcode{D}. If the definitions of
\tcode{D} do not satisfy these requirements, then the behavior is
undefined.%
-\indextext{one-definition~rule|)}
+\indextext{one-definition rule|)}
\rSec1[basic.scope]{Scope}%
\indextext{scope|(}
@@ -529,7 +528,7 @@
\indextext{scope!declarations and|(}
\pnum
-\indextext{name!scope~of}%
+\indextext{name!scope of}%
Every name is introduced in some portion of program text called a
\indextext{region!declarative}%
\indextext{scope!potential}%
@@ -548,7 +547,7 @@
\pnum
\begin{example}
-in
+In
\begin{codeblock}
int j = 24;
@@ -611,7 +610,7 @@
\rSec2[basic.scope.pdecl]{Point of declaration}
\pnum
-\indextext{name!point~of declaration}%
+\indextext{name!point of declaration}%
The \defn{point of declaration} for a name is immediately after its
complete declarator (Clause~\ref{dcl.decl}) and before its
\grammarterm{initializer} (if any), except as noted below. \begin{example}
@@ -626,7 +625,7 @@
\pnum
\begin{note}
-\indextext{name~hiding}%
+\indextext{name hiding}%
a name from an outer scope remains visible up
to the point of declaration of the name that hides it. \begin{example}
@@ -654,7 +653,7 @@
constructor is immediately after the \grammarterm{using-declarator}~(\ref{namespace.udecl}).
\pnum
-\indextext{declaration!enumerator point~of}%
+\indextext{declaration!enumerator point of}%
The point of declaration for an enumerator is immediately after its
\grammarterm{enumerator-definition}. \begin{example}
@@ -670,7 +669,7 @@
After the point of declaration of a class member, the member name can be
looked up in the scope of its class. \begin{note}
\indextext{type!incomplete}%
-this is true even if the class is an incomplete class. For example,
+This is true even if the class is an incomplete class. For example,
\begin{codeblock}
struct X {
@@ -755,7 +754,7 @@
\pnum
\indextext{scope!block}%
-\indextext{local~scope|see{block scope}}%
+\indextext{local scope|see{block scope}}%
A name declared in a block~(\ref{stmt.block}) is local to that block; it has
\defn{block scope}.
Its potential scope begins at its point of
@@ -763,7 +762,7 @@
A variable declared at block scope is a \defn{local variable}.
\pnum
-\indextext{parameter!scope~of}%
+\indextext{parameter!scope of}%
The potential scope of a function parameter name
(including one appearing in a
\grammarterm{lambda-declarator})
@@ -780,7 +779,7 @@
with a \grammarterm{function-try-block}.
\pnum
-\indextext{scope!exception~declaration}%
+\indextext{scope!exception declaration}%
The name declared in an \grammarterm{exception-declaration}
is local to the
\grammarterm{handler} and shall not be redeclared in the outermost block of the
@@ -799,8 +798,8 @@
\rSec2[basic.scope.proto]{Function prototype scope}
\pnum
-\indextext{scope!function~prototype}%
-\indextext{function~prototype}%
+\indextext{scope!function prototype}%
+\indextext{function prototype}%
In a function declaration, or in any function declarator except the
declarator of a function definition~(\ref{dcl.fct.def}), names of
parameters (if supplied) have function prototype scope, which terminates
@@ -809,7 +808,7 @@
\rSec2[basic.funscope]{Function scope}
\pnum
-\indextext{label!scope~of}%
+\indextext{label!scope of}%
Labels~(\ref{stmt.label}) have \defnx{function scope}{scope!function} and
may be used anywhere in the function in which they are declared. Only
labels have function scope.
@@ -839,8 +838,7 @@
void q();
}
namespace { int l=1; }
-// the potential scope of \tcode{l} is from its point of declaration
-// to the end of the translation unit
+// the potential scope of \tcode{l} is from its point of declaration to the end of the translation unit
namespace N {
int g(char a) { // overloads \tcode{N::g(int)}
@@ -917,8 +915,7 @@
enum { i = 1 };
class X {
- char v[i]; // error: \tcode{i} refers to \tcode{::i}
- // but when reevaluated is \tcode{X::i}
+ char v[i]; // error: \tcode{i} refers to \tcode{::i} but when reevaluated is \tcode{X::i}
int f() { return sizeof(c); } // OK: \tcode{X::c}
char c;
enum { i = 2 };
@@ -926,8 +923,7 @@
typedef char* T;
struct Y {
- T a; // error: \tcode{T} refers to \tcode{::T}
- // but when reevaluated is \tcode{Y::T}
+ T a; // error: \tcode{T} refers to \tcode{::T} but when reevaluated is \tcode{Y::T}
typedef long T;
T b;
};
@@ -963,8 +959,8 @@
\grammarterm{enum-specifier}.
\rSec2[basic.scope.temp]{Template parameter scope}%
-\indextext{template~parameter~scope}%
-\indextext{scope!template~parameter}%
+\indextext{template parameter scope}%
+\indextext{scope!template parameter}%
\pnum
The declarative region of the name of a template parameter of a template
@@ -990,7 +986,7 @@
\end{codeblock}
The declarative regions of \tcode{T}, \tcode{U} and \tcode{V} are the
-\grammarterm{template-declaration}{s} on lines \tcode{\#1}, \tcode{\#2} and \tcode{\#3},
+\grammarterm{template-declaration}{s} on lines \#1, \#2, and \#3,
respectively. But the names \tcode{A}, \tcode{f}, \tcode{g} and \tcode{C} all belong to
the same declarative region --- namely, the \grammarterm{namespace-body} of \tcode{N}.
(\tcode{g} is still considered to belong to this declarative region in spite of its
@@ -1006,7 +1002,7 @@
default arguments. For example,
\begin{codeblock}
-template class X { /* ... */ };
+template class X { @\commentellip@ };
template void f(T* p = new T);
\end{codeblock}
@@ -1014,8 +1010,8 @@
specification of base classes. For example,
\begin{codeblock}
-template class X : public Array { /* ... */ };
-template class Y : public T { /* ... */ };
+template class X : public Array { @\commentellip@ };
+template class Y : public T { @\commentellip@ };
\end{codeblock}
The use of a template parameter as a base class implies that a class used as a template
@@ -1046,14 +1042,14 @@
\rSec2[basic.scope.hiding]{Name hiding}
\pnum
-\indextext{scope~name~hiding~and}%
-\indextext{name~hiding}%
+\indextext{scope name hiding and}%
+\indextext{name hiding}%
\indextext{hiding|see{name hiding}}%
A name can be hidden by an explicit declaration of that same name in a
nested declarative region or derived class~(\ref{class.member.lookup}).
\pnum
-\indextext{name~hiding}%
+\indextext{name hiding}%
A class name~(\ref{class.name}) or enumeration name~(\ref{dcl.enum}) can
be hidden by the name of a variable, data member, function, or enumerator declared in
the same scope. If a class or enumeration name and a variable, data member, function,
@@ -1082,7 +1078,7 @@
\indextext{scope|)}
\rSec1[basic.lookup]{Name lookup}%
-\indextext{scope!name~lookup~and|(}%
+\indextext{scope!name lookup and|(}%
\indextext{lookup!name|(}%
\pnum
@@ -1121,7 +1117,7 @@
\rSec2[basic.lookup.unqual]{Unqualified name lookup}
\pnum
-\indextext{lookup!unqualified~name}%
+\indextext{lookup!unqualified name}%
\indextext{name!unqualified}%
In all the cases listed in~\ref{basic.lookup.unqual}, the scopes are
searched for a declaration in the order listed in each of the respective
@@ -1153,8 +1149,7 @@
friend void f(A &);
operator int();
void g(A a) {
- int i = f(a); // \tcode{f} is the typedef, not the friend
- // function: equivalent to \tcode{int(a)}
+ int i = f(a); // \tcode{f} is the typedef, not the friend function: equivalent to \tcode{int(a)}
}
};
}
@@ -1219,11 +1214,11 @@
\item if \tcode{X} is a nested class of class
\tcode{Y}~(\ref{class.nest}), before the definition of \tcode{X} in
\tcode{Y}, or shall be a member of a base class of \tcode{Y} (this
-lookup applies in turn to \tcode{Y} 's enclosing classes, starting with
+lookup applies in turn to \tcode{Y}'s enclosing classes, starting with
the innermost enclosing class),\footnote{This lookup applies whether the
definition of \tcode{X} is
nested within \tcode{Y}'s definition or whether \tcode{X}'s definition
-appears in a namespace scope enclosing \tcode{Y} 's
+appears in a namespace scope enclosing \tcode{Y}'s
definition~(\ref{class.nest}).}
or
\item if \tcode{X} is a local class~(\ref{class.local}) or is a nested
@@ -1233,7 +1228,7 @@
class of a class that is a member of \tcode{N}, or is a local class or a
nested class within a local class of a function that is a member of
\tcode{N}, before the definition of class \tcode{X} in namespace
-\tcode{N} or in one of \tcode{N} 's enclosing namespaces.
+\tcode{N} or in one of \tcode{N}'s enclosing namespaces.
\end{itemize}
\begin{example}
\begin{codeblock}
@@ -1309,7 +1304,7 @@
class of a class that is a member of \tcode{N}, or is a local class or a
nested class within a local class of a function that is a member of
\tcode{N}, before the use of the name, in namespace \tcode{N}
-or in one of \tcode{N} 's enclosing namespaces.
+or in one of \tcode{N}'s enclosing namespaces.
\end{itemize}
\begin{example}
\begin{codeblock}
@@ -1420,7 +1415,7 @@
int i = 2;
-int N::j = i; // \tcode{N::j == 4}
+int N::j = i; // \tcode{N::j == 4}
\end{codeblock}
\end{example}
@@ -1453,7 +1448,6 @@
(and for template template arguments, the namespace of the template
argument).
\begin{example}
-
\begin{codeblock}
namespace N {
struct S { };
@@ -1462,12 +1456,10 @@
void g() {
N::S s;
- f(s); // OK: calls \tcode{N::f}
- (f)(s); // error: \tcode{N::f} not considered; parentheses
- // prevent argument-dependent lookup
+ f(s); // OK: calls \tcode{N::f}
+ (f)(s); // error: \tcode{N::f} not considered; parentheses prevent argument-dependent lookup
}
\end{codeblock}
-
\end{example}
\pnum
@@ -1585,7 +1577,7 @@
\rSec2[basic.lookup.qual]{Qualified name lookup}
\pnum
-\indextext{lookup!qualified~name|(}%
+\indextext{lookup!qualified name|(}%
\indextext{name!qualified}%
\indextext{qualification!explicit}%
The name of a class or namespace member
@@ -1635,14 +1627,14 @@
static X arr[number];
};
X C::arr[number]; // ill-formed:
- // equivalent to: \tcode{::X} \tcode{C::arr[C::number];}
- // not to: \tcode{C::X} \tcode{C::arr[C::number];}
+ // equivalent to \tcode{::X} \tcode{C::arr[C::number];}
+ // and not to \tcode{C::X} \tcode{C::arr[C::number];}
\end{codeblock}
\end{example}
\pnum
-\indextext{operator!scope~resolution}%
-\indextext{scope~resolution~operator|see{operator, scope~resolution}}%
+\indextext{operator!scope resolution}%
+\indextext{scope resolution operator|see{operator, scope resolution}}%
A name prefixed by the unary scope operator \tcode{::}~(\ref{expr.prim})
is looked up in global scope, in the translation unit where it is used.
The name shall be declared in global namespace scope or shall be a name
@@ -1678,8 +1670,7 @@
extern int* p;
extern int* q;
p->C::I::~I(); // \tcode{I} is looked up in the scope of \tcode{C}
-q->I1::~I2(); // \tcode{I2} is looked up in the scope of
- // the postfix-expression
+q->I1::~I2(); // \tcode{I2} is looked up in the scope of the postfix-expression
struct A {
~A();
@@ -1696,7 +1687,7 @@
\rSec3[class.qual]{Class members}
\pnum
-\indextext{lookup!class~member}%
+\indextext{lookup!class member}%
If the \grammarterm{nested-name-specifier} of a \grammarterm{qualified-id}
nominates a class, the name specified after the
\grammarterm{nested-name-specifier} is looked up in the scope of the
@@ -1770,7 +1761,7 @@
\rSec3[namespace.qual]{Namespace members}
\pnum
-\indextext{lookup!namespace~member}%
+\indextext{lookup!namespace member}%
If the \grammarterm{nested-name-specifier} of a \grammarterm{qualified-id}
nominates a namespace (including the case where the
\grammarterm{nested-name-specifier} is \tcode{::}, i.e., nominating
@@ -1833,36 +1824,32 @@
void h()
{
- AB::g(); // \tcode{g} is declared directly in \tcode{AB,}
- // therefore \tcode{S} is \{ \tcode{AB::g()} \} and \tcode{AB::g()} is chosen
- AB::f(1); // \tcode{f} is not declared directly in \tcode{AB} so the rules are
- // applied recursively to \tcode{A} and \tcode{B;}
- // namespace \tcode{Y} is not searched and \tcode{Y::f(float)}
- // is not considered;
- // \tcode{S} is \{ \tcode{A::f(int)}, \tcode{B::f(char)} \} and overload
- // resolution chooses \tcode{A::f(int)}
+ AB::g(); // \tcode{g} is declared directly in \tcode{AB}, therefore \tcode{S} is $\{ \tcode{AB::g()} \}$ and \tcode{AB::g()} is chosen
+
+ AB::f(1); // \tcode{f} is not declared directly in \tcode{AB} so the rules are applied recursively to \tcode{A} and \tcode{B};
+ // namespace \tcode{Y} is not searched and \tcode{Y::f(float)} is not considered;
+ // \tcode{S} is $\{ \tcode{A::f(int)}, \tcode{B::f(char)} \}$ and overload resolution chooses \tcode{A::f(int)}
+
AB::f('c'); // as above but resolution chooses \tcode{B::f(char)}
- AB::x++; // \tcode{x} is not declared directly in \tcode{AB}, and
- // is not declared in \tcode{A} or \tcode{B} , so the rules are
- // applied recursively to \tcode{Y} and \tcode{Z},
- // \tcode{S} is \{ \} so the program is ill-formed
- AB::i++; // \tcode{i} is not declared directly in \tcode{AB} so the rules are
- // applied recursively to \tcode{A} and \tcode{B},
- // \tcode{S} is \{ \tcode{A::i} , \tcode{B::i} \} so the use is ambiguous
- // and the program is ill-formed
- AB::h(16.8); // \tcode{h} is not declared directly in \tcode{AB} and
- // not declared directly in \tcode{A} or \tcode{B} so the rules are
- // applied recursively to \tcode{Y} and \tcode{Z},
- // \tcode{S} is \{ \tcode{Y::h(int)}, \tcode{Z::h(double)} \} and overload
- // resolution chooses \tcode{Z::h(double)}
+ AB::x++; // \tcode{x} is not declared directly in \tcode{AB}, and is not declared in \tcode{A} or \tcode{B}, so the rules
+ // are applied recursively to \tcode{Y} and \tcode{Z}, \tcode{S} is $\{ \}$ so the program is ill-formed
+
+ AB::i++; // \tcode{i} is not declared directly in \tcode{AB} so the rules are applied recursively to \tcode{A} and \tcode{B},
+ // \tcode{S} is $\{ \tcode{A::i}, \tcode{B::i} \}$ so the use is ambiguous and the program is ill-formed
+
+ AB::h(16.8); // \tcode{h} is not declared directly in \tcode{AB} and not declared directly in \tcode{A} or \tcode{B} so the rules
+ // are applied recursively to \tcode{Y} and \tcode{Z}, \tcode{S} is $\{ \tcode{Y::h(int)}, \tcode{Z::h(double)} \}$ and
+ // overload resolution chooses \tcode{Z::h(double)}
}
\end{codeblock}
+\end{example}
\pnum
+\begin{note}
The same declaration found more than once is not an ambiguity (because
-it is still a unique declaration). For example:
-
+it is still a unique declaration).
+\begin{example}
\begin{codeblock}
namespace A {
int a;
@@ -1883,7 +1870,7 @@
void f()
{
- BC::a++; // OK: \tcode{S} is \{ \tcode{A::a}, \tcode{A::a} \}
+ BC::a++; // OK: \tcode{S} is $\{ \tcode{A::a}, \tcode{A::a} \}$
}
namespace D {
@@ -1897,11 +1884,14 @@
void g()
{
- BD::a++; // OK: S is \{ \tcode{ A::a}, \tcode{ A::a} \}
+ BD::a++; // OK: \tcode{S} is $\{ \tcode{A::a}, \tcode{A::a} \}$
}
\end{codeblock}
+\end{example}
+\end{note}
\pnum
+\begin{example}
Because each referenced namespace is searched at most once, the
following is well-defined:
@@ -1921,10 +1911,10 @@
void f()
{
- A::a++; // OK: \tcode{a} declared directly in \tcode{A}, \tcode{S} is \{\tcode{A::a}\}
- B::a++; // OK: both \tcode{A} and \tcode{B} searched (once), \tcode{S} is \{\tcode{A::a}\}
- A::b++; // OK: both \tcode{A} and \tcode{B} searched (once), \tcode{S} is \{\tcode{B::b}\}
- B::b++; // OK: \tcode{b} declared directly in \tcode{B}, \tcode{S} is \{\tcode{B::b}\}
+ A::a++; // OK: \tcode{a} declared directly in \tcode{A}, \tcode{S} is $\{ \tcode{A::a} \}$
+ B::a++; // OK: both \tcode{A} and \tcode{B} searched (once), \tcode{S} is $\{ \tcode{A::a} \}$
+ A::b++; // OK: both \tcode{A} and \tcode{B} searched (once), \tcode{S} is $\{ \tcode{B::b} \}$
+ B::b++; // OK: \tcode{b} declared directly in \tcode{B}, \tcode{S} is $\{ \tcode{B::b} \}$
}
\end{codeblock}
\end{example}
@@ -1953,7 +1943,7 @@
namespace C {
using namespace A;
using namespace B;
- int i = C::x; // OK, \tcode{A::x} (of type \tcode{int} )
+ int i = C::x; // OK, \tcode{A::x} (of type \tcode{int})
int j = C::y; // ambiguous, \tcode{A::y} or \tcode{B::y}
}
\end{codeblock}
@@ -2007,11 +1997,11 @@
void B::f1(int){ } // OK, defines \tcode{A::B::f1(int)}
\end{codeblock}
\end{example}
-\indextext{lookup!qualified~name|)}%
+\indextext{lookup!qualified name|)}%
\rSec2[basic.lookup.elab]{Elaborated type specifiers}%
-\indextext{lookup!elaborated~type~specifier|(}%
-\indextext{type~specifier!elaborated}
+\indextext{lookup!elaborated type specifier|(}%
+\indextext{type specifier!elaborated}
\pnum
An \grammarterm{elaborated-type-specifier}~(\ref{dcl.type.elab}) may be
@@ -2065,11 +2055,9 @@
struct Data {
struct Node* Node; // OK: Refers to \tcode{Node} at global scope
- friend struct ::Glob; // error: \tcode{Glob} is not declared
- // cannot introduce a qualified type~(\ref{dcl.type.elab})
- friend struct Glob; // OK: Refers to (as yet) undeclared \tcode{Glob}
- // at global scope.
- /* ... */
+ friend struct ::Glob; // error: \tcode{Glob} is not declared, cannot introduce a qualified type~(\ref{dcl.type.elab})
+ friend struct Glob; // OK: Refers to (as yet) undeclared \tcode{Glob} at global scope.
+ @\commentellip@
};
struct Base {
@@ -2078,7 +2066,7 @@
struct Base::Data* thisData; // OK: Refers to nested \tcode{Data}
friend class ::Data; // OK: global \tcode{Data} is a friend
friend class Data; // OK: nested \tcode{Data} is a friend
- struct Data @\tcode{\{ /* ... */ \};}@ // Defines nested \tcode{Data}
+ struct Data { @\commentellip@ }; // Defines nested \tcode{Data}
};
struct Data; // OK: Redeclares \tcode{Data} at global scope
@@ -2088,7 +2076,7 @@
struct Base::Data* pBase; // OK: refers to nested \tcode{Data}
\end{codeblock}
\end{example} %
-\indextext{lookup!elaborated~type~specifier|)}%
+\indextext{lookup!elaborated type specifier|)}%
\rSec2[basic.lookup.classref]{Class member access}
@@ -2118,8 +2106,7 @@
\grammarterm{postfix-expression}. If the type \tcode{T} of the object
expression is of a class type \tcode{C}, the \grammarterm{type-name} is
also looked up in the scope of class \tcode{C}. At least one of the
-lookups shall find a name that refers to (possibly cv-qualified)
-\tcode{T}. \begin{example}
+lookups shall find a name that refers to \cv{}~\tcode{T}. \begin{example}
\begin{codeblock}
struct A { };
@@ -2190,14 +2177,14 @@
\rSec2[basic.lookup.udir]{Using-directives and namespace aliases}
\pnum
-\indextext{lookup!using-directives~and}%
-\indextext{lookup!namespace~aliases~and}%
+\indextext{lookup!using-directives and}%
+\indextext{lookup!namespace aliases and}%
In a \grammarterm{using-directive} or \grammarterm{namespace-alias-definition},
during the lookup for a \grammarterm{namespace-name} or for a name in a
\grammarterm{nested-name-specifier}{}
only namespace names are considered.%
\indextext{lookup!name|)}%
-\indextext{scope!name~lookup~and|)}
+\indextext{scope!name lookup and|)}
\rSec1[basic.link]{Program and linkage}%
\indextext{linkage|(}
@@ -2237,12 +2224,12 @@
\end{itemize}
\pnum
-\indextext{linkage!\idxcode{static}~and}%
-\indextext{\idxcode{static}!linkage~of}%
-\indextext{linkage!\idxcode{const}~and}%
-\indextext{\idxcode{const}!linkage~of}%
-\indextext{linkage!\idxcode{inline}~and}%
-\indextext{\idxcode{inline}!linkage~of}%
+\indextext{linkage!\idxcode{static} and}%
+\indextext{\idxcode{static}!linkage of}%
+\indextext{linkage!\idxcode{const} and}%
+\indextext{\idxcode{const}!linkage of}%
+\indextext{linkage!\idxcode{inline} and}%
+\indextext{\idxcode{inline}!linkage of}%
A name having namespace scope~(\ref{basic.scope.namespace}) has internal
linkage if it is the name of
\begin{itemize}
@@ -2266,11 +2253,11 @@
\begin{itemize}
\item a variable; or
\item a function; or
-\item \indextext{class!linkage~of}%
+\item \indextext{class!linkage of}%
a named class (Clause~\ref{class}), or an unnamed class defined in a
typedef declaration in which the class has the typedef name for linkage
purposes~(\ref{dcl.typedef}); or
-\item \indextext{enumeration!linkage~of}%
+\item \indextext{enumeration!linkage of}%
a named enumeration~(\ref{dcl.enum}), or an unnamed enumeration defined
in a typedef declaration in which the enumeration has the typedef name
for linkage purposes~(\ref{dcl.typedef}); or
@@ -2310,10 +2297,10 @@
There are three objects named \tcode{i} in this program. The object with
internal linkage introduced by the declaration in global scope (line
-\tcode{\#1} ), the object with automatic storage duration and no linkage
-introduced by the declaration on line \tcode{\#2}, and the object with
+\#1), the object with automatic storage duration and no linkage
+introduced by the declaration on line \#2, and the object with
static storage duration and external linkage introduced by the
-declaration on line \tcode{\#3}. \end{example}
+declaration on line \#3. \end{example}
\pnum
When a block scope declaration of an entity with linkage is not found to
@@ -2332,10 +2319,10 @@
q(); // error: \tcode{q} not yet declared
}
- void q() @\tcode{\{ /* ... */ \}}@ // definition of \tcode{X::q}
+ void q() { @\commentellip@ } // definition of \tcode{X::q}
}
-void q() @\tcode{\{ /* ... */ \}}@ // some other, unrelated \tcode{q}
+void q() { @\commentellip@ } // some other, unrelated \tcode{q}
\end{codeblock}
\end{example}
@@ -2440,11 +2427,11 @@
\rSec1[basic.start]{Start and termination}
-\rSec2[basic.start.main]{Main function}
+\rSec2[basic.start.main]{\tcode{main} function}
+\indextext{\idxcode{main} function|(}
\pnum
\indextext{program!start|(}%
-\indextext{\idxcode{main()}}%
A program shall contain a global function called \tcode{main}, which is the designated
start of the program. It is \impldef{defining \tcode{main} in freestanding environment}
whether a program in a freestanding environment is required to define a \tcode{main}
@@ -2459,7 +2446,7 @@
function shall not be overloaded. Its type shall have \Cpp language linkage
and it shall have a declared return type of type
\tcode{int}, but otherwise its type is \impldef{parameters to \tcode{main}}.
-\indextext{\idxcode{main()}!implementation-defined parameters~to}%
+\indextext{\idxcode{main} function!implementation-defined parameters to}%
An implementation shall allow both
\begin{itemize}
\item a function of \tcode{()} returning \tcode{int} and
@@ -2469,7 +2456,7 @@
\indextext{\idxcode{argc}}%
\indextext{\idxcode{argv}}%
as the type of \tcode{main}~(\ref{dcl.fct}).
-\indextext{\idxcode{main()}!parameters~to}%
+\indextext{\idxcode{main} function!parameters to}%
\indextext{environment!program}%
In the latter form, for purposes of exposition, the first function
parameter is called \tcode{argc} and the second function parameter is
@@ -2489,7 +2476,7 @@
\pnum
The function \tcode{main} shall not be used within
a program.
-\indextext{\idxcode{main()}!implementation-defined linkage~of}%
+\indextext{\idxcode{main} function!implementation-defined linkage of}%
The linkage~(\ref{basic.link}) of \tcode{main} is
\impldef{linkage of \tcode{main}}. A program that defines \tcode{main} as
deleted or that declares \tcode{main} to be
@@ -2499,7 +2486,7 @@
declares a variable \tcode{main} at global scope or that declares the name
\tcode{main} with C language linkage (in any namespace) is ill-formed.
The name \tcode{main} is
-not otherwise reserved. \begin{example} member functions, classes, and
+not otherwise reserved. \begin{example} Member functions, classes, and
enumerations can be called \tcode{main}, as can entities in other
namespaces. \end{example}
@@ -2517,7 +2504,7 @@
\pnum
\indextext{termination!program}%
-\indextext{\idxcode{main()}!return from}%
+\indextext{\idxcode{main} function!return from}%
A return statement in \tcode{main} has the effect of leaving the main
function (destroying any objects with automatic storage duration) and
calling \tcode{std::exit} with the return value as the argument.
@@ -2525,6 +2512,7 @@
the \grammarterm{compound-statement} of \tcode{main},
the effect is equivalent to a \tcode{return} with operand \tcode{0}
(see also \ref{except.handle}).
+\indextext{\idxcode{main} function|)}
\rSec2[basic.start.static]{Static initialization}
@@ -2540,7 +2528,7 @@
\indextext{initialization!\idxcode{static object}}%
\indextext{initialization!constant}%
A \defn{constant initializer} for an object \tcode{o} is an expression that is a
-constant expression, except that it may also invoke \tcode{constexpr} constructors
+constant expression, except that it may also invoke constexpr constructors
for \tcode{o} and its subobjects even if those objects are of non-literal class
types. \begin{note} Such a class may have a non-trivial destructor. \end{note}
\defnx{Constant initialization}{constant initialization} is performed:
@@ -2613,9 +2601,9 @@
\rSec2[basic.start.dynamic]{Dynamic initialization of non-local variables}
\pnum
-\indextext{initialization!dynamic~non-local}%
+\indextext{initialization!dynamic non-local}%
\indextext{start!program}%
-\indextext{initialization!order~of}%
+\indextext{initialization!order of}%
Dynamic initialization of a non-local variable with static storage duration is
unordered if the variable is an implicitly or explicitly instantiated
specialization, is partially-ordered if the variable
@@ -2655,7 +2643,7 @@
\end{note}
\pnum
-\indextext{evaluation!unspecified order~of}%
+\indextext{evaluation!unspecified order of}%
It is \impldef{dynamic initialization of static variables before \tcode{main}} whether the
dynamic initialization of a non-local non-inline variable with static storage duration
happens before the first statement of \tcode{main}. If the initialization is deferred to
@@ -2733,7 +2721,7 @@
\pnum
\indextext{program!termination|(}%
\indextext{object!destructor static}%
-\indextext{\idxcode{main()}!return from}%
+\indextext{\idxcode{main} function!return from}%
Destructors~(\ref{class.dtor}) for initialized objects
(that is, objects whose lifetime~(\ref{basic.life}) has begun)
with static storage duration
@@ -2810,8 +2798,8 @@
\rSec1[basic.stc]{Storage duration}
\pnum
-\indextext{storage~duration|(}%
-The \defnx{storage duration}{storage~duration} is the property of an object that defines the minimum
+\indextext{storage duration|(}%
+The \defn{storage duration} is the property of an object that defines the minimum
potential lifetime of the storage containing the object. The storage
duration is determined by the construct used to create the object and is
one of the following:
@@ -2824,10 +2812,10 @@
\end{itemize}
\pnum
-\indextext{storage~duration!static}%
-\indextext{storage~duration!thread}%
-\indextext{storage~duration!automatic}%
-\indextext{storage~duration!dynamic}%
+\indextext{storage duration!static}%
+\indextext{storage duration!thread}%
+\indextext{storage duration!automatic}%
+\indextext{storage duration!dynamic}%
Static, thread, and automatic storage durations are associated with objects
introduced by declarations~(\ref{basic.def}) and implicitly created by
the implementation~(\ref{class.temporary}). The dynamic storage duration
@@ -2854,7 +2842,7 @@
\rSec2[basic.stc.static]{Static storage duration}
\pnum
-\indextext{storage~duration!static}%
+\indextext{storage duration!static}%
All variables which do not have dynamic storage duration, do not have thread
storage duration, and are not local
have \defn{static storage duration}. The
@@ -2882,7 +2870,7 @@
\rSec2[basic.stc.thread]{Thread storage duration}
\pnum
-\indextext{storage~duration!thread}%
+\indextext{storage duration!thread}%
All variables declared with the \tcode{thread_local} keyword have \defn{thread
storage duration}. The storage for these entities shall last for the duration of
the thread in which they are created. There is a distinct object or reference
@@ -2896,8 +2884,8 @@
\rSec2[basic.stc.auto]{Automatic storage duration}
\pnum
-\indextext{storage~duration!automatic}%
-\indextext{storage~duration!local object}%
+\indextext{storage duration!automatic}%
+\indextext{storage duration!local object}%
Block-scope variables
not explicitly declared \tcode{static}, \tcode{thread_local}, or \tcode{extern} have
\defn{automatic storage duration}. The storage
@@ -2916,7 +2904,7 @@
specified in~\ref{class.copy}.
\rSec2[basic.stc.dynamic]{Dynamic storage duration}%
-\indextext{storage~duration!dynamic|(}
+\indextext{storage duration!dynamic|(}
\pnum
Objects can be created dynamically during program
@@ -3072,7 +3060,7 @@
in global scope.
\pnum
-\indextext{\idxcode{delete}!overloading~and}%
+\indextext{\idxcode{delete}!overloading and}%
Each deallocation function shall return \tcode{void} and its first
parameter shall be \tcode{void*}. A deallocation function may have more
than one parameter.
@@ -3121,7 +3109,7 @@
\pnum
\indextext{pointer!safely-derived|(}%
-\indextext{pointer!to~traceable~object}%
+\indextext{pointer!to traceable object}%
A \defn{traceable pointer object} is
\begin{itemize}
\item an object of an object pointer
@@ -3207,25 +3195,25 @@
\impldef{whether an implementation has relaxed or strict pointer
safety} whether an implementation has relaxed or strict pointer safety.%
\indextext{pointer!safely-derived|)}%
-\indextext{storage~duration!dynamic|)}
+\indextext{storage duration!dynamic|)}
\rSec2[basic.stc.inherit]{Duration of subobjects}
\pnum
-\indextext{storage~duration!class member}%
+\indextext{storage duration!class member}%
The storage duration of subobjects and reference members
is that of their complete object~(\ref{intro.object}).
-\indextext{storage~duration|)}%
+\indextext{storage duration|)}%
\rSec1[basic.life]{Object lifetime}
\pnum
-\indextext{object~lifetime|(}%
+\indextext{object lifetime|(}%
The \defn{lifetime} of an object or reference is a runtime property of the
object or reference.
An object is said to have \defnx{non-vacuous initialization}{initialization!non-vacuous} if it is of a class or
aggregate type and it or one of its subobjects is initialized by a constructor
-other than a trivial default constructor. \begin{note} initialization by a
+other than a trivial default constructor. \begin{note} Initialization by a
trivial copy/move constructor is non-vacuous initialization. \end{note}
The lifetime of an object of type \tcode{T} begins when:
\begin{itemize}
@@ -3307,9 +3295,9 @@
\item
the pointer is used as the operand of a
\tcode{static_cast}~(\ref{expr.static.cast}), except when the conversion
- is to pointer to \cv{} \tcode{void}, or to pointer to \cv{}
- \tcode{void} and subsequently to pointer to either \cv{}
- \tcode{char} or \cv{} \tcode{unsigned char}, or
+ is to pointer to \cv{}~\tcode{void}, or to pointer to \cv{}~\tcode{void}
+ and subsequently to pointer to either \cv{}~\tcode{char}
+ or \cv{}~\tcode{unsigned char}, or
\item
the pointer is used as the operand of a
\tcode{dynamic_cast}~(\ref{expr.dynamic.cast}).
@@ -3462,7 +3450,7 @@
void h() {
b.~B();
- new (const_cast(&b)) const B; // undefined behavior
+ new (const_cast(&b)) const B; // undefined behavior
}
\end{codeblock}
\end{example}
@@ -3472,7 +3460,7 @@
relation~(\ref{intro.multithread}). \begin{note} Therefore, undefined behavior results
if an object that is being constructed in one thread is referenced from another
thread without adequate synchronization. \end{note}%
-\indextext{object~lifetime|)}
+\indextext{object lifetime|)}
\rSec1[basic.types]{Types}%
\indextext{type|(}
@@ -3489,8 +3477,8 @@
\end{note}
\pnum
-\indextext{object!byte~copying~and|(}%
-\indextext{type!trivially~copyable}%
+\indextext{object!byte copying and|(}%
+\indextext{type!trivially copyable}%
For any object (other than a base-class subobject) of trivially copyable type
\tcode{T}, whether or not the object holds a valid value of type
\tcode{T}, the underlying bytes~(\ref{intro.memory}) making up the
@@ -3500,15 +3488,12 @@
If the content of the array of \tcode{char} or \tcode{unsigned}
\tcode{char} is copied back into the object, the object shall
subsequently hold its original value. \begin{example}
-
\begin{codeblock}
#define N sizeof(T)
char buf[N];
T obj; // \tcode{obj} initialized to its original value
-std::memcpy(buf, &obj, N); // between these two calls to \tcode{std::memcpy},
- // \tcode{obj} might be modified
-std::memcpy(&obj, buf, N); // at this point, each subobject of \tcode{obj} of scalar type
- // holds its original value
+std::memcpy(buf, &obj, N); // between these two calls to \tcode{std::memcpy}, \tcode{obj} might be modified
+std::memcpy(&obj, buf, N); // at this point, each subobject of \tcode{obj} of scalar type holds its original value
\end{codeblock}
\end{example}
@@ -3531,7 +3516,7 @@
// the same value as the corresponding subobject in \tcode{*t2p}
\end{codeblock}
\end{example}%
-\indextext{object!byte~copying~and|)}
+\indextext{object!byte copying and|)}
\pnum
The \defn{object representation}
@@ -3554,11 +3539,11 @@
\indextext{type!incompletely-defined object}%
A class that has been declared but not defined, an enumeration type in certain
contexts~(\ref{dcl.enum}), or an array of unknown
-size or of incomplete element type, is an
+bound or of incomplete element type, is an
\defnx{incompletely-defined object type}{object type!incompletely-defined}.%
\footnote{The size and layout of an instance of an incompletely-defined
object type is unknown.}
-Incompletely-defined object types and \cv{} \tcode{void} are
+Incompletely-defined object types and \cv{}~\tcode{void} are
\defnx{incomplete types}{type!incomplete}~(\ref{basic.fundamental}).
Objects shall not be defined to have an
incomplete type.
@@ -3575,10 +3560,10 @@
point in a translation unit and complete later on; the array types at
those two points (``array of unknown bound of \tcode{T}'' and ``array of
\tcode{N} \tcode{T}'') are different types. The type of a pointer to array of
-unknown size, or of a type defined by a \tcode{typedef} declaration to
-be an array of unknown size, cannot be completed. \begin{example}
+unknown bound, or of a type defined by a \tcode{typedef} declaration to
+be an array of unknown bound, cannot be completed. \begin{example}
-\indextext{type!example~of incomplete}%
+\indextext{type!example of incomplete}%
\begin{codeblock}
class X; // \tcode{X} is an incomplete type
extern X* xp; // \tcode{xp} is a pointer to an incomplete type
@@ -3611,9 +3596,8 @@
contexts incomplete types are prohibited. \end{note}
\pnum
-\indextext{object~type}%
An \defn{object type} is a (possibly cv-qualified) type that is not
-a function type, not a reference type, and not \cv{} \tcode{void}.
+a function type, not a reference type, and not \cv{}~\tcode{void}.
\pnum
Arithmetic types~(\ref{basic.fundamental}), enumeration types, pointer
@@ -3622,7 +3606,7 @@
and
cv-qualified versions of these
types~(\ref{basic.type.qualifier}) are collectively called
-\defnx{scalar types}{scalar~type}. Scalar types,
+\defnx{scalar types}{scalar type}. Scalar types,
POD classes (Clause~\ref{class}), arrays of such types and
cv-qualified versions of these
types~(\ref{basic.type.qualifier}) are collectively called
@@ -3652,7 +3636,7 @@
\item it has a trivial destructor,
\item it is either a closure type~(\ref{expr.prim.lambda}),
an aggregate type~(\ref{dcl.init.aggr}), or
-has at least one \tcode{constexpr} constructor or constructor template
+has at least one constexpr constructor or constructor template
(possibly inherited~(\ref{namespace.udecl}) from a base class)
that is not a copy or move constructor,
\item if it is a union, at least one of its non-static data members is
@@ -3663,7 +3647,7 @@
\end{itemize}
\pnum
-\indextext{layout-compatible~type}%
+\indextext{layout-compatible type}%
Two types \cvqual{cv1} \tcode{T1} and \cvqual{cv2} \tcode{T2} are
\defn{layout-compatible} types
if \tcode{T1} and \tcode{T2} are the same type,
@@ -3686,7 +3670,7 @@
value of that character object is equal to the value of the single
character literal form of that character. It is \impldef{signedness of \tcode{char}}
whether a \tcode{char} object can hold negative values.
-\indextext{\idxcode{char}!implementation-defined sign~of}%
+\indextext{\idxcode{char}!implementation-defined sign of}%
\indextext{type!\idxcode{signed char}}%
\indextext{type!\idxcode{unsigned char}}%
Characters can be explicitly declared \tcode{unsigned} or
@@ -3719,8 +3703,8 @@
\placeholder{j} to \tcode{unsigned char} is \placeholder{i}.
\pnum
-\indextext{type!standard~signed~integer}%
-There are five \defnx{standard signed integer types}{standard~signed~integer~type} :
+\indextext{type!standard signed integer}%
+There are five \defnx{standard signed integer types}{standard signed integer type} :
\indextext{type!\idxcode{signed char}}%
\indextext{type!\idxcode{short}}%
\indextext{type!\idxcode{int}}%
@@ -3730,14 +3714,14 @@
``\tcode{long int}'', and ``\tcode{long} \tcode{long} \tcode{int}''. In
this list, each type provides at least as much storage as those
preceding it in the list.
-\indextext{type!extended~signed~integer}%
-\indextext{type!signed~integer}%
+\indextext{type!extended signed integer}%
+\indextext{type!signed integer}%
There may also be \impldef{extended signed integer types}
-\defnx{extended signed integer types}{extended~signed~integer~type}.
+\defnx{extended signed integer types}{extended signed integer type}.
The standard and
extended signed integer types are collectively called
-\defnx{signed integer types}{signed~integer~type}.
-\indextext{integral~type!implementation-defined @\tcode{sizeof}}%
+\defnx{signed integer types}{signed integer type}.
+\indextext{integral type!implementation-defined @\tcode{sizeof}}%
Plain
\tcode{int}s have the natural size suggested by the architecture of the
execution environment%
@@ -3751,8 +3735,8 @@
\indextext{type!\idxcode{unsigned}}%
For each of the standard signed integer types,
there exists a corresponding (but different)
-\indextext{type!standard~unsigned~integer}%
-\defnx{standard unsigned integer type}{standard~unsigned~integer~type}:
+\indextext{type!standard unsigned integer}%
+\defn{standard unsigned integer type}:
\indextext{type!\idxcode{unsigned char}}%
\indextext{type!\idxcode{unsigned short}}%
\indextext{type!\idxcode{unsigned int}}%
@@ -3767,24 +3751,25 @@
the sequences of \grammarterm{type-specifier}{s} that designate them.};
that is, each signed integer type has the same object representation as
its corresponding unsigned integer type.
-\indextext{type!extended~unsigned~integer}%
-\indextext{type!unsigned~integer}%
+\indextext{type!extended unsigned integer}%
+\indextext{type!unsigned integer}%
Likewise, for each of the extended signed integer types there exists a
corresponding
-\defnx{extended unsigned integer type}{extended~unsigned~integer~type} with the same amount of storage and alignment
+\defn{extended unsigned integer type} with the same amount of storage and alignment
requirements. The standard and extended unsigned integer types are
-collectively called \defnx{unsigned integer types}{unsigned~integer~type}. The range of non-negative
+collectively called \defnx{unsigned integer types}{unsigned integer type}. The range of non-negative
values of a signed integer type is a subrange of the corresponding
unsigned integer type, and the value
representation of each corresponding signed/unsigned type shall be the
same.
-\indextext{type!standard~integer}%
-\indextext{type!extended~integer}%
+\indextext{type!standard integer}%
+\indextext{type!extended integer}%
The standard signed integer types and standard unsigned integer types
-are collectively called the \defnx{standard integer types}{standard~integer~type}, and the extended
+are collectively called the \defnx{standard integer types}{standard integer type}, and the extended
signed integer types and extended
-unsigned integer types are collectively called the \defnx{extended
-integer types}{extended~integer~type}. The signed and unsigned integer types shall satisfy
+unsigned integer types are collectively called the
+\defnx{extended integer types}{extended integer type}.
+The signed and unsigned integer types shall satisfy
the constraints given in the C standard, section 5.2.4.2.1.
\pnum
@@ -3804,7 +3789,7 @@
\indextext{type!\idxcode{char16_t}}%
\indextext{type!\idxcode{char32_t}}%
\indextext{type!\idxcode{wchar_t}}%
-\indextext{underlying~type|see{type, underlying}}%
+\indextext{underlying type|see{type, underlying}}%
\indextext{type!underlying!\idxcode{char16_t}}%
\indextext{type!underlying!\idxcode{char32_t}}%
Type \tcode{wchar_t} is a distinct type whose values can represent
@@ -3818,10 +3803,10 @@
respectively, in \tcode{}, called the underlying types.
\pnum
-\indextext{Boolean~type}%
+\indextext{Boolean type}%
Values of type \tcode{bool} are either \tcode{true} or
\tcode{false}.\footnote{Using a \tcode{bool} value in ways described by this International
-Standard as ``undefined,'' such as by examining the value of an
+Standard as ``undefined'', such as by examining the value of an
uninitialized automatic object, might cause it to behave as if it is
neither \tcode{true} nor \tcode{false}.}
\begin{note} There are no \tcode{signed}, \tcode{unsigned}, \tcode{short},
@@ -3832,26 +3817,26 @@
Types \tcode{bool}, \tcode{char}, \tcode{char16_t}, \tcode{char32_t},
\tcode{wchar_t}, and the signed and unsigned integer types are
collectively called
-\defnx{integral}{integral~type} types.\footnote{Therefore, enumerations~(\ref{dcl.enum}) are not integral; however,
+\defnx{integral}{integral type} types.\footnote{Therefore, enumerations~(\ref{dcl.enum}) are not integral; however,
enumerations can be promoted to integral types as specified
in~\ref{conv.prom}.}
A synonym for integral type is
\indextext{signed integer representation!ones' complement}%
\indextext{signed integer representation!two's complement}%
\indextext{signed integer representation!signed magnitude}%
-\defnx{integer type}{integer~type}. The representations of integral types shall
+\defn{integer type}. The representations of integral types shall
define values by use of a pure binary numeration system.\footnote{A positional
representation for integers that uses the binary digits 0
and 1, in which the values represented by successive bits are additive,
begin with 1, and are multiplied by successive integral power of 2,
except perhaps for the bit with the highest position. (Adapted from the
\doccite{American National Dictionary for Information Processing Systems}.)}
-\begin{example} this International Standard permits two's complement,
+\begin{example} This International Standard permits two's complement,
ones' complement and signed magnitude representations for integral types.
\end{example}
\pnum
-There are three \defnx{floating-point}{floating~point~type} types:
+There are three \defnx{floating-point}{floating-point type} types:
\indextext{type!\idxcode{float}}%
\tcode{float},
\indextext{type!\idxcode{double}}%
@@ -3866,10 +3851,10 @@
of the set of values of the type \tcode{long} \tcode{double}. The value
representation of floating-point types is \impldef{value representation of
floating-point types}.
-\indextext{floating~point~type!implementation-defined}%
+\indextext{floating-point type!implementation-defined}%
\begin{note}
This International Standard imposes no requirements on the accuracy of
-floating-point operations; see also~\ref{limits}.
+floating-point operations; see also~\ref{support.limits}.
\end{note}
Integral and floating types are collectively
called \defnx{arithmetic}{type!arithmetic} types.
@@ -3881,19 +3866,19 @@
\pnum
\indextext{type!\idxcode{void}}%
-A type \cv{} \tcode{void}
+A type \cv{}~\tcode{void}
is an incomplete type that cannot be completed; such a type has
an empty set of values. It is used as the return
type for functions that do not return a value. Any expression can be
-explicitly converted to type \cv{} \tcode{void}~(\ref{expr.cast}).
-An expression of type \cv{} \tcode{void} shall
+explicitly converted to type \cv{}~\tcode{void}~(\ref{expr.cast}).
+An expression of type \cv{}~\tcode{void} shall
be used only as an expression statement~(\ref{stmt.expr}), as an operand
of a comma expression~(\ref{expr.comma}), as a second or third operand
of \tcode{?:}~(\ref{expr.cond}), as the operand of
\tcode{typeid}, \tcode{noexcept}, or \tcode{decltype}, as
the expression in a return statement~(\ref{stmt.return}) for a function
-with the return type \cv{} \tcode{void}, or as the operand of an explicit conversion
-to type \cv{} \tcode{void}.
+with the return type \cv{}~\tcode{void}, or as the operand of an explicit conversion
+to type \cv{}~\tcode{void}.
\pnum
A value of type \tcode{std::nullptr_t} is a null pointer
@@ -3918,7 +3903,7 @@
\item \defnx{functions}{type!function}, which have parameters of given types and return
\tcode{void} or references or objects of a given type,~\ref{dcl.fct};
-\item \defnx{pointers}{type!pointer} to \cv{} \tcode{void} or objects or functions (including
+\item \defnx{pointers}{type!pointer} to \cv{}~\tcode{void} or objects or functions (including
static members of classes) of a given type,~\ref{dcl.ptr};
\item %
@@ -3927,8 +3912,8 @@
\defnx{references}{reference} to objects or functions of a given
type,~\ref{dcl.ref}. There are two types of references:
\begin{itemize}
-\item \defnx{lvalue reference}{lvalue~reference}
-\item \defnx{rvalue reference}{rvalue~reference}
+\item \defn{lvalue reference}
+\item \defn{rvalue reference}
\end{itemize}
\item
@@ -3946,8 +3931,8 @@
Each distinct enumeration constitutes a different
\defnx{enumerated type}{type!enumerated},~\ref{dcl.enum};
-\item \indextext{member~pointer~to|see{pointer to member}}%
-\defnx{pointers to non-static class members}{pointer~to~member},%
+\item \indextext{member pointer to|see{pointer to member}}%
+\defnx{pointers to non-static class members}{pointer to member},%
\footnote{Static class members are objects or functions, and pointers to them are
ordinary pointers to objects or functions.}
which identify members of a given
@@ -3963,14 +3948,14 @@
\pnum
\indextext{terminology!pointer}%
-The type of a pointer to \cv{} \tcode{void} or a pointer to an object type is
+The type of a pointer to \cv{}~\tcode{void} or a pointer to an object type is
called an \defn{object pointer type}. \begin{note} A pointer to \tcode{void}
does not have a pointer-to-object type, however, because \tcode{void} is not
an object type. \end{note} The type of a pointer that can designate a function
is called a \defn{function pointer type}.
A pointer to objects of type \tcode{T} is referred to as a ``pointer to
-\tcode{T}''. \begin{example} a pointer to an object of type \tcode{int} is
-referred to as ``pointer to \tcode{int} '' and a pointer to an object of
+\tcode{T}''. \begin{example} A pointer to an object of type \tcode{int} is
+referred to as ``pointer to \tcode{int}'' and a pointer to an object of
class \tcode{X} is called a ``pointer to \tcode{X}''. \end{example}
Except for pointers to static members, text referring to ``pointers''
does not apply to pointers to members. Pointers to incomplete types are
@@ -4013,7 +3998,7 @@
a pointer past the end of the last element of
an array \tcode{x} of $n$ elements
is considered to be equivalent to
-a pointer to a hypothetical element $\mathtt{x[}n\mathtt{]}$.
+a pointer to a hypothetical element \tcode{x[$n$]}.
The value representation of
pointer types is \impldef{value representation of pointer types}. Pointers to
layout-compatible types shall
@@ -4058,9 +4043,9 @@
\tcode{void}
can be used to point to objects of
unknown type. Such a pointer shall be able to hold any object pointer.
-An object of type \cv{}
-\tcode{void*} shall have the same representation and alignment
-requirements as \cv{} \tcode{char*}.
+An object of type \cv{}~\tcode{void*}
+shall have the same representation and alignment
+requirements as \cv{}~\tcode{char*}.
\rSec2[basic.type.qualifier]{CV-qualifiers}
@@ -4074,8 +4059,8 @@
\tcode{void}~(\ref{basic.types}) has three corresponding cv-qualified
versions of its type: a \defn{const-qualified} version, a
\defn{volatile-qualified} version, and a
-\defn{const-volatile-qualified} version. The term
-\term{object type}~(\ref{intro.object}) includes the cv-qualifiers
+\defn{const-volatile-qualified} version. The
+type of an object~(\ref{intro.object}) includes the \grammarterm{cv-qualifier}{s}
specified in the \grammarterm{decl-specifier-seq}~(\ref{dcl.spec}),
\grammarterm{declarator} (Clause~\ref{dcl.decl}),
\grammarterm{type-id}~(\ref{dcl.name}), or
@@ -4134,7 +4119,7 @@
represents an arbitrary set of cv-qualifiers, i.e., one of
\{\tcode{const}\}, \{\tcode{volatile}\}, \{\tcode{const},
\tcode{volatile}\}, or the empty set.
-For a type \cv{} \tcode{T}, the \defnx{top-level cv-qualifiers}{cv-qualifier!top-level}
+For a type \cv{}~\tcode{T}, the \defnx{top-level cv-qualifiers}{cv-qualifier!top-level}
of that type are those denoted by \cv.
\begin{example}
The type corresponding to the \grammarterm{type-id}
@@ -4152,11 +4137,10 @@
\pnum
Cv-qualifiers applied to an array
type attach to the underlying element type, so the notation
-``\cv{} \tcode{T}'', where \tcode{T} is an array type, refers to
+``\cv{}~\tcode{T}'', where \tcode{T} is an array type, refers to
an array whose elements are so-qualified. An array type whose elements
are cv-qualified is also considered to have the same cv-qualifications
-as its elements.%
-\indextext{type|)}
+as its elements.
\begin{example}
\begin{codeblock}
typedef char CA[5];
@@ -4167,7 +4151,8 @@
The type of both \tcode{arr1} and \tcode{arr2} is ``array of 5
\tcode{const char}'', and the array type is considered to be
const-qualified.
-\end{example}
+\end{example}%
+\indextext{type|)}
\rSec1[basic.lval]{Lvalues and rvalues}
\pnum
@@ -4220,7 +4205,7 @@
is the object initialized by the prvalue;
a prvalue
that is used to compute the value of an operand of an operator or
-that has type (possibly cv-qualified) \tcode{void}
+that has type \cv{}~\tcode{void}
has no result object.
\begin{note}
Except when the prvalue is the operand of a \grammarterm{decltype-specifier},
@@ -4256,7 +4241,7 @@
\pnum
Unless otherwise indicated~(\ref{expr.call}),
a prvalue shall always have complete type or the \tcode{void} type.
-A glvalue shall not have type \cv{} \tcode{void}.
+A glvalue shall not have type \cv{}~\tcode{void}.
\begin{note}
A glvalue may have complete or incomplete non-\tcode{void} type.
Class and array prvalues can have cv-qualified types; other prvalues
@@ -4304,7 +4289,7 @@
\rSec1[basic.align]{Alignment}
\pnum
-Object types have \defnx{alignment requirements}{alignment~requirement!implementation-defined} (\ref{basic.fundamental},~\ref{basic.compound})
+Object types have \defnx{alignment requirements}{alignment requirement!implementation-defined} (\ref{basic.fundamental},~\ref{basic.compound})
which place restrictions on the addresses at which an object of that type
may be allocated. An \defn{alignment} is an \impldef{alignment}
integer value representing the number of bytes between successive addresses
@@ -4314,7 +4299,7 @@
\pnum
\indextext{alignment!fundamental}%
-A \defnx{fundamental alignment}{fundamental~alignment} is represented by an alignment
+A \defn{fundamental alignment} is represented by an alignment
less than or equal to the greatest alignment supported by the implementation in
all contexts, which is equal to
\tcode{alignof(std::max_align_t)}~(\ref{support.types}).
@@ -4336,14 +4321,14 @@
\pnum
\indextext{alignment!extended}%
\indextext{alignment!new-extended}%
-\indextext{over-aligned~type}%
+\indextext{over-aligned type}%
\indextext{type!over-aligned}%
An \defn{extended alignment} is represented by an alignment
greater than \tcode{alignof(std::max_align_t)}. It is \impldef{support for extended alignments}
whether any extended alignments are supported and the contexts in which they are
supported~(\ref{dcl.align}). A type having an extended alignment
requirement is an \grammarterm{over-aligned type}. \begin{note}
-every over-aligned type is or contains a class type
+Every over-aligned type is or contains a class type
to which extended alignment applies (possibly through a non-static data member).
\end{note}
A \defn{new-extended alignment} is represented by
diff --git a/source/classes.tex b/source/classes.tex
index d14f8a8009..bd45a647f8 100644
--- a/source/classes.tex
+++ b/source/classes.tex
@@ -9,10 +9,10 @@
\pnum
\indextext{\idxcode{\{\}}!class declaration}%
\indextext{\idxcode{\{\}}!class definition}%
-\indextext{type!class~and}%
-\indextext{object~class|seealso{class~object}}%
+\indextext{type!class and}%
+\indextext{object class|seealso{class object}}%
A class is a type.
-\indextext{name~class|see{class~name}}%
+\indextext{name class|see{class name}}%
Its name becomes a \grammarterm{class-name}~(\ref{class.name}) within its
scope.
@@ -110,9 +110,9 @@
\end{note}
\pnum
-\indextext{\idxcode{struct}!\tcode{class}~versus}%
+\indextext{\idxcode{struct}!\tcode{class} versus}%
\indextext{structure}%
-\indextext{\idxcode{union}!\tcode{class}~versus}%
+\indextext{\idxcode{union}!\tcode{class} versus}%
A \term{union} is a class defined with the \grammarterm{class-key}
\tcode{union};
\indextext{access control!\idxcode{union} default member}%
@@ -122,7 +122,7 @@
\end{note}
\indextext{class!trivial}%
-\indextext{trivial~class}%
+\indextext{trivial class}%
\indextext{class!trivially copyable}%
\pnum
A \defn{trivially copyable class} is a class:
@@ -144,7 +144,7 @@
virtual functions or virtual base classes.\end{note}
\indextext{class!standard-layout}%
-\indextext{standard-layout~class}%
+\indextext{standard-layout class}%
\pnum
A class \tcode{S} is a \grammarterm{standard-layout class} if it:
\begin{itemize}
@@ -213,9 +213,9 @@
\end{example}
\indextext{struct!standard-layout}%
-\indextext{standard-layout~struct}%
+\indextext{standard-layout struct}%
\indextext{union!standard-layout}%
-\indextext{standard-layout~union}%
+\indextext{standard-layout union}%
\pnum
A \grammarterm{standard-layout struct} is a standard-layout class
defined with the \grammarterm{class-key} \tcode{struct} or the
@@ -282,8 +282,8 @@
definition shall not begin with a \grammarterm{decltype-specifier}.
\rSec1[class.name]{Class names}
-\indextext{definition!class~name~as type}%
-\indextext{structure~tag|see{class~name}}%
+\indextext{definition!class name as type}%
+\indextext{structure tag|see{class name}}%
\indextext{equivalence!type}%
\pnum
@@ -325,10 +325,10 @@
\end{example}
\pnum
-\indextext{definition!scope~of class}%
-\indextext{class~name!scope~of}%
+\indextext{definition!scope of class}%
+\indextext{class name!scope of}%
A class declaration introduces the class name into the scope where
-\indextext{name~hiding!class definition}%
+\indextext{name hiding!class definition}%
it is declared and hides any
class, variable, function, or other declaration of that name in an
enclosing scope~(\ref{basic.scope}). If a class name is declared in a
@@ -337,38 +337,33 @@
referred to only using an
\grammarterm{elaborated-type-specifier}~(\ref{basic.lookup.elab}).
\begin{example}
-
\begin{codeblock}
struct stat {
// ...
};
-stat gstat; // use plain \tcode{stat} to
- // define variable
+stat gstat; // use plain \tcode{stat} to define variable
int stat(struct stat*); // redeclare \tcode{stat} as function
void f() {
- struct stat* ps; // \tcode{struct} prefix needed
- // to name \tcode{struct stat}
+ struct stat* ps; // \tcode{struct} prefix needed to name \tcode{struct stat}
stat(ps); // call \tcode{stat()}
}
\end{codeblock}
\end{example}
-\indextext{class~name!elaborated}%
+\indextext{class name!elaborated}%
\indextext{declaration!forward class}%
-A \grammarterm{declaration} consisting solely of \grammarterm{class-key
-identifier;} is either a redeclaration of the name in the current scope
+A \grammarterm{declaration} consisting solely of \grammarterm{class-key}
+\grammarterm{identifier}\tcode{;} is either a redeclaration of the name in the current scope
or a forward declaration of the identifier as a class name. It
introduces the class name into the current scope.
\begin{example}
-
\begin{codeblock}
struct s { int a; };
void g() {
- struct s; // hide global \tcode{struct s}
- // with a block-scope declaration
+ struct s; // hide global \tcode{struct s} with a block-scope declaration
s* p; // refer to local \tcode{struct s}
struct s { char* p; }; // define local \tcode{struct s}
struct s; // redeclaration, has no effect
@@ -379,7 +374,6 @@
Such declarations allow definition of classes that refer to each other.
\indextext{example!friend}%
\begin{example}
-
\begin{codeblock}
class Vector;
@@ -393,15 +387,14 @@
friend Vector operator*(const Matrix&, const Vector&);
};
\end{codeblock}
-
Declaration of \tcode{friend}s is described in~\ref{class.friend},
operator functions in~\ref{over.oper}.
\end{example}
\end{note}
\pnum
-\indextext{class~name!elaborated}%
-\indextext{elaborated~type~specifier|see{class name, elaborated}}%
+\indextext{class name!elaborated}%
+\indextext{elaborated type specifier|see{class name, elaborated}}%
\begin{note}
An \grammarterm{elaborated-type-specifier}~(\ref{dcl.type.elab}) can also
be used as a \grammarterm{type-specifier} as part of a declaration. It
@@ -421,7 +414,7 @@
\end{example}
\pnum
-\indextext{class~name!point~of declaration}%
+\indextext{class name!point of declaration}%
\begin{note}
The declaration of a class name takes effect immediately after the
\grammarterm{identifier} is seen in the class definition or
@@ -438,7 +431,7 @@
\end{note}
\pnum
-\indextext{class~name!\idxcode{typedef}}%
+\indextext{class name!\idxcode{typedef}}%
A \grammarterm{typedef-name}~(\ref{dcl.typedef}) that names a class type,
or a cv-qualified version thereof, is also a \grammarterm{class-name}. If a
\grammarterm{typedef-name} that names a cv-qualified class type is used
@@ -448,7 +441,7 @@
\rSec1[class.mem]{Class members}%
\indextext{declaration!member}%
-\indextext{data~member|see{member}}
+\indextext{data member|see{member}}
\begin{bnf}
\nontermdef{member-specification}\br
@@ -572,7 +565,7 @@
\end{note}
\pnum
-\indextext{completely~defined}%
+\indextext{completely defined}%
A class is considered a completely-defined object
type~(\ref{basic.types}) (or complete type) at the closing \tcode{\}} of
the \grammarterm{class-specifier}.
@@ -608,7 +601,7 @@
see~\ref{class.static.data}; for non-static data members,
see~\ref{class.base.init} and~\ref{dcl.init.aggr}).
A \grammarterm{brace-or-equal-initializer} for a non-static data member
-\indextext{member!default~initializer}%
+\indextext{member!default initializer}%
specifies a \defn{default member initializer} for the member, and
shall not directly or indirectly cause the implicit definition of a
defaulted default constructor for the enclosing class or the
@@ -616,7 +609,7 @@
\pnum
A member shall not be declared with the \tcode{extern}
-\nonterminal{storage-class-specifier}. Within a class definition, a member shall not be declared with the \tcode{thread_local} \nonterminal{storage-class-specifier} unless also declared \tcode{static}.
+\grammarterm{storage-class-specifier}. Within a class definition, a member shall not be declared with the \tcode{thread_local} \grammarterm{storage-class-specifier} unless also declared \tcode{static}.
\pnum
The \grammarterm{decl-specifier-seq} may be omitted in constructor, destructor,
@@ -644,7 +637,7 @@
function~(\ref{class.virtual}).
\pnum
-\indextext{class~object!member}%
+\indextext{class object!member}%
Non-static data members shall not have
incomplete types. In particular, a class \tcode{C} shall not contain a
non-static member of class \tcode{C}, but it can contain a pointer or
@@ -664,7 +657,7 @@
\end{note}
\pnum
-\indextext{example!class~definition}%
+\indextext{example!class definition}%
\begin{example}
A simple example of a class definition is
@@ -694,7 +687,7 @@
\end{example}
\pnum
-\indextext{layout!class~object}%
+\indextext{layout!class object}%
Non-static data members of a (non-union) class
with the same access control (Clause~\ref{class.access})
are allocated so that later
@@ -782,8 +775,8 @@
struct T2 { int c; double d; };
union U { T1 t1; T2 t2; };
int f() {
- U u = { { 1, 2 } }; // active member is \tcode{t1}
- return u.t2.c; // OK, as if \tcode{u.t1.a} were nominated
+ U u = { { 1, 2 } }; // active member is \tcode{t1}
+ return u.t2.c; // OK, as if \tcode{u.t1.a} were nominated
}
\end{codeblock}
\end{example}
@@ -810,7 +803,7 @@
\pnum
\indextext{member function!inline}%
-\indextext{definition!member~function}%
+\indextext{definition!member function}%
A member function may be defined~(\ref{dcl.fct.def}) in its class
definition, in which case it is an \term{inline} member
function~(\ref{dcl.fct.spec}), or it may be defined outside of its class
@@ -843,7 +836,7 @@
\end{note}
\pnum
-\indextext{operator!scope~resolution}%
+\indextext{operator!scope resolution}%
If the definition of a member function is lexically outside its class
definition, the member function name shall be qualified by its class
name using the \tcode{::} operator.
@@ -883,7 +876,7 @@
Previously declared member functions may be mentioned in \tcode{friend} declarations.
\pnum
-\indextext{local~class!member~function~in}%
+\indextext{local class!member function in}%
Member functions of a local class shall be defined inline in their class
definition, if they are defined at all.
@@ -958,7 +951,7 @@
\grammarterm{nested-name-specifier} names the class of the member function.
These transformations do not apply in the
template definition context~(\ref{temp.dep.type}).
-\indextext{example!member~function}%
+\indextext{example!member function}%
\begin{example}
\begin{codeblock}
@@ -1030,11 +1023,11 @@
\indextext{member function!\idxcode{this}}
\pnum
-\indextext{this pointer@\tcode{this}~pointer|see{\tcode{this}}}%
+\indextext{this pointer@\tcode{this} pointer|see{\tcode{this}}}%
In the body of a non-static~(\ref{class.mfct}) member function, the
keyword \tcode{this} is a prvalue expression whose value is the
address of the object for which the function is called.
-\indextext{\idxcode{this}!type~of}%
+\indextext{\idxcode{this}!type of}%
The type of \tcode{this} in a member function of a class \tcode{X} is
\tcode{X*}.
\indextext{member function!\idxcode{const}}%
@@ -1046,7 +1039,7 @@
is declared \tcode{const} \tcode{volatile}, the type of \tcode{this} is
\tcode{const} \tcode{volatile} \tcode{X*}.
\indextext{member function!\idxcode{const}}%
-\begin{note} thus in a \tcode{const} member function, the object for which the function is
+\begin{note} Thus in a \tcode{const} member function, the object for which the function is
called is accessed through a \tcode{const} access path. \end{note}
\begin{example}
@@ -1094,10 +1087,10 @@
\end{example}
\pnum
-\indextext{\idxcode{const}!constructor~and}%
-\indextext{\idxcode{const}!destructor~and}%
-\indextext{\idxcode{volatile}!constructor~and}%
-\indextext{\idxcode{volatile}!destructor~and}%
+\indextext{\idxcode{const}!constructor and}%
+\indextext{\idxcode{const}!destructor and}%
+\indextext{\idxcode{volatile}!constructor and}%
+\indextext{\idxcode{volatile}!destructor and}%
Constructors~(\ref{class.ctor}) and destructors~(\ref{class.dtor}) shall
not be declared \tcode{const}, \tcode{volatile} or \tcode{const}
\tcode{volatile}. \begin{note} However, these functions can be invoked to
@@ -1198,7 +1191,7 @@
\tcode{volatile}, or \tcode{const volatile}.
\rSec3[class.static.data]{Static data members}
-\indextext{member~data!static}%
+\indextext{member data!static}%
\pnum
A static data member is not part of the subobjects of a class. If a
@@ -1213,11 +1206,11 @@
The declaration of a non-inline
static data member in its class definition
is not a definition and may be of an incomplete type other than
-\cv{} \tcode{void}. The definition for a static data
+\cv{}~\tcode{void}. The definition for a static data
member that is not defined inline in the class definition
shall appear in a namespace scope enclosing the member's class
definition.
-\indextext{operator~use!scope~resolution}%
+\indextext{operator use!scope resolution}%
In the definition at namespace scope, the name of the static
data member shall be qualified by its class name using the \tcode{::}
operator. The \grammarterm{initializer} expression in the definition of a
@@ -1249,7 +1242,7 @@
Once the static data member has been defined, it exists even if
no objects of its class have been created.
\begin{example}
-in the example above, \tcode{run_chain} and \tcode{running} exist even
+In the example above, \tcode{run_chain} and \tcode{running} exist even
if no objects of class \tcode{process} are created by the program.
\end{example}
\end{note}
@@ -1304,7 +1297,7 @@
identifier\opt attribute-specifier-seq\opt{} \terminal{:} constant-expression
\end{ncbnftab}
-\indextext{\idxcode{:}!field declaration}%
+\indextext{\idxcode{:}!bit-field declaration}%
\indextext{declaration!bit-field}%
specifies a bit-field;
its length is set off from the bit-field name by a colon. The optional \grammarterm{attribute-specifier-seq} appertains to the entity being declared. The bit-field
@@ -1316,10 +1309,10 @@
representation~(\ref{basic.types}) of the bit-field's type; in such
cases the extra bits are used as padding bits and do not participate in
the value representation~(\ref{basic.types}) of the bit-field.
-\indextext{allocation!implementation~defined bit-field}%
+\indextext{allocation!implementation-defined bit-field}%
Allocation of bit-fields within a class object is
\impldef{allocation of bit-fields within a class object}.
-\indextext{bit-field!implementation~defined alignment~of}%
+\indextext{bit-field!implementation-defined alignment of}%
Alignment of bit-fields is \impldef{alignment of bit-fields within a class object}.
\indextext{layout!bit-field}%
Bit-fields are packed into some addressable allocation unit.
@@ -1338,26 +1331,26 @@
An unnamed bit-field is useful for padding to conform to
externally-imposed layouts.
\end{note}
-\indextext{bit-field!zero~width~of}%
-\indextext{bit-field!alignment~of}%
+\indextext{bit-field!zero width of}%
+\indextext{bit-field!alignment of}%
As a special case, an unnamed bit-field with a width of zero specifies
alignment of the next bit-field at an allocation unit boundary. Only
when declaring an unnamed bit-field may the value of the
\grammarterm{constant-expression} be equal to zero.
\pnum
-\indextext{bit-field!type~of}%
+\indextext{bit-field!type of}%
A bit-field shall not be a static member. A bit-field shall have
integral or enumeration type~(\ref{basic.fundamental}).
\indextext{Boolean}%
A \tcode{bool} value can successfully be stored in a bit-field of any
nonzero size.
-\indextext{bit-field!address~of}%
+\indextext{bit-field!address of}%
The address-of operator \tcode{\&} shall not be applied to a bit-field,
so there are no pointers to bit-fields.
\indextext{restriction!bit-field}%
-\indextext{restriction!address~of bit-field}%
-\indextext{restriction!pointer~to bit-field}%
+\indextext{restriction!address of bit-field}%
+\indextext{restriction!pointer to bit-field}%
A non-const reference shall not be bound to a
bit-field~(\ref{dcl.init.ref}).
\begin{note}
@@ -1387,28 +1380,28 @@
void f() {
a.b = TRUE;
if (a.b == TRUE) // yields \tcode{true}
- { /* ... */ }
+ { @\commentellip@ }
}
\end{codeblock}
\end{example}
\rSec2[class.nest]{Nested class declarations}%
-\indextext{definition!nested~class}%
-\indextext{class~local|see{local~class}}%
-\indextext{class~nested|see{nested~class}}
+\indextext{definition!nested class}%
+\indextext{class local|see{local class}}%
+\indextext{class nested|see{nested class}}
\pnum
A class can be declared within another class. A class declared within
another is called a \grammarterm{nested} class. The name of a nested class
is local to its enclosing class.
-\indextext{nested~class!scope~of}%
+\indextext{nested class!scope of}%
The nested class is in the scope of its enclosing class.
\begin{note}
See~\ref{expr.prim} for restrictions on the use of non-static data
members and non-static member functions.
\end{note}
-\indextext{example!nested~class}%
+\indextext{example!nested class}%
\begin{example}
\begin{codeblock}
@@ -1440,7 +1433,7 @@
\pnum
Member functions and static data members of a nested class can be
defined in a namespace scope enclosing the definition of their class.
-\indextext{example!nested~class definition}%
+\indextext{example!nested class definition}%
\begin{example}
\begin{codeblock}
@@ -1453,7 +1446,7 @@
int enclose::inner::x = 1;
-void enclose::inner::f(int i) { /* ... */ }
+void enclose::inner::f(int i) { @\commentellip@ }
\end{codeblock}
\end{example}
@@ -1462,7 +1455,7 @@
\tcode{Y} may be declared in class \tcode{X} and later defined in the
definition of class \tcode{X} or be later defined in a namespace scope
enclosing the definition of class \tcode{X}.
-\indextext{example!nested~class forward~declaration}%
+\indextext{example!nested class forward declaration}%
\begin{example}
\begin{codeblock}
@@ -1476,7 +1469,7 @@
\end{example}
\pnum
-\indextext{friend~function!nested~class}%
+\indextext{friend function!nested class}%
Like a member function, a friend function~(\ref{class.friend}) defined
within a nested class is in the lexical scope of that class; it obeys
the same rules for name binding as a static member function of that
@@ -1484,8 +1477,8 @@
members of an enclosing class.
\rSec2[class.nested.type]{Nested type names}
-\indextext{type~name!nested}%
-\indextext{type~name!nested!scope of}%
+\indextext{type name!nested}%
+\indextext{type name!nested!scope of}%
\pnum
Type names obey exactly the same scope rules as other names. In
@@ -1493,11 +1486,11 @@
outside their class without qualification.
\begin{example}
-\indextext{example!nested type~name}%
+\indextext{example!nested type name}%
\begin{codeblock}
struct X {
typedef int I;
- class Y { /* ... */ };
+ class Y { @\commentellip@ };
I a;
};
@@ -1629,21 +1622,21 @@
struct B { A a; };
union C { B b; int k; };
int f() {
- C c; // does not start lifetime of any union member
- c.b.a.y[3] = 4; // OK: $S($\tcode{c.b.a.y[3]}$)$ contains \tcode{c.b} and \tcode{c.b.a.y};
- // creates objects to hold union members \tcode{c.b} and \tcode{c.b.a.y}
- return c.b.a.y[3]; // OK: \tcode{c.b.a.y} refers to newly created object (see \ref{basic.life})
+ C c; // does not start lifetime of any union member
+ c.b.a.y[3] = 4; // OK: $S($\tcode{c.b.a.y[3]}$)$ contains \tcode{c.b} and \tcode{c.b.a.y};
+ // creates objects to hold union members \tcode{c.b} and \tcode{c.b.a.y}
+ return c.b.a.y[3]; // OK: \tcode{c.b.a.y} refers to newly created object (see \ref{basic.life})
}
struct X { const int a; int b; };
union Y { X x; int k; };
void g() {
- Y y = { { 1, 2 } }; // OK, \tcode{y.x} is active union member (\ref{class.mem})
+ Y y = { { 1, 2 } }; // OK, \tcode{y.x} is active union member (\ref{class.mem})
int n = y.x.a;
- y.k = 4; // OK: ends lifetime of \tcode{y.x}, \tcode{y.k} is active member of union
- y.x.b = n; // undefined behavior: \tcode{y.x.b} modified outside its lifetime,
- // $S($\tcode{y.x.b}$)$ is empty because \tcode{X}'s default constructor is deleted,
- // so union member \tcode{y.x}'s lifetime does not implicitly start
+ y.k = 4; // OK: ends lifetime of \tcode{y.x}, \tcode{y.k} is active member of union
+ y.x.b = n; // undefined behavior: \tcode{y.x.b} modified outside its lifetime,
+ // $S($\tcode{y.x.b}$)$ is empty because \tcode{X}'s default constructor is deleted,
+ // so union member \tcode{y.x}'s lifetime does not implicitly start
}
\end{codeblock}
\end{example}
@@ -1704,7 +1697,7 @@
\pnum
\indextext{\idxcode{union}!global anonymous}%
-\indextext{scope!anonymous \tcode{union}~at namespace}%
+\indextext{scope!anonymous \tcode{union} at namespace}%
Anonymous unions declared in a named namespace or in the global
namespace shall be declared \tcode{static}. Anonymous unions declared at
block scope shall be declared with any storage class allowed for a
@@ -1723,8 +1716,8 @@
\begin{codeblock}
void f() {
union { int aa; char* p; } obj, *ptr = &obj;
- aa = 1; // error
- ptr->aa = 1; // OK
+ aa = 1; // error
+ ptr->aa = 1; // OK
}
\end{codeblock}
@@ -1734,20 +1727,19 @@
\end{example}
\begin{note}
Initialization of unions with no user-declared constructors is described
-in~(\ref{dcl.init.aggr}).
+in~\ref{dcl.init.aggr}.
\end{note}
\pnum
\indextext{class!union-like}%
-\indextext{class!variant~member~of}%
+\indextext{class!variant member of}%
A \defn{union-like class} is a union or a class that has an anonymous union as a direct
-member. A union-like class \tcode{X} has a set of \defn{variant member}{s}.
+member. A union-like class \tcode{X} has a set of \defnx{variant members}{variant member}.
If \tcode{X} is a union, a non-static data member of \tcode{X} that is not an anonymous
union is a variant member of \tcode{X}. In addition, a non-static data member of an
anonymous union that is a member of \tcode{X} is also a variant member of \tcode{X}.
At most one variant member of a union may have a default member initializer.
\begin{example}
-
\begin{codeblock}
union U {
int x = 0;
@@ -1756,22 +1748,21 @@
};
union {
int z;
- int y = 1; // error: initialization for second variant member of \tcode{U}
+ int y = 1; // error: initialization for second variant member of \tcode{U}
};
};
\end{codeblock}
-
\end{example}
\rSec1[class.local]{Local class declarations}
-\indextext{declaration!local~class}%
-\indextext{definition!local~class}%
+\indextext{declaration!local class}%
+\indextext{definition!local class}%
\pnum
A class can be declared within a function definition; such a class is
called a \grammarterm{local} class. The name of a local class is local to
its enclosing scope.
-\indextext{local~class!scope~of}%
+\indextext{local class!scope of}%
The local class is in the scope of the enclosing scope, and has the same
access to names outside the function as does the enclosing function.
Declarations in a local class
@@ -1779,7 +1770,7 @@
duration from an
enclosing scope.
\begin{example}
-\indextext{example!local~class}%
+\indextext{example!local class}%
\begin{codeblock}
int x;
void f() {
@@ -1805,20 +1796,20 @@
\pnum
An enclosing function has no special access to members of the local
class; it obeys the usual access rules (Clause~\ref{class.access}).
-\indextext{member function!local~class}%
+\indextext{member function!local class}%
Member functions of a local class shall be defined within their class
definition, if they are defined at all.
\pnum
-\indextext{nested~class!local~class}%
+\indextext{nested class!local class}%
If class \tcode{X} is a local class a nested class \tcode{Y} may be
declared in class \tcode{X} and later defined in the definition of class
\tcode{X} or be later defined in the same scope as the definition of
class \tcode{X}.
-\indextext{restriction!local~class}%
+\indextext{restriction!local class}%
A class nested within
a local class is a local class.
\pnum
-\indextext{restriction!static member local~class}%
+\indextext{restriction!static member local class}%
A local class shall not have static data members.
diff --git a/source/compatibility.tex b/source/compatibility.tex
index 00ac9c389d..0570090df6 100644
--- a/source/compatibility.tex
+++ b/source/compatibility.tex
@@ -4,7 +4,7 @@
\rSec1[diff.iso]{\Cpp and ISO C}
\pnum
-\indextext{summary!compatibility~with ISO C}%
+\indextext{summary!compatibility with ISO C}%
This subclause lists the differences between \Cpp and
ISO C, by the chapters of this document.
@@ -162,10 +162,10 @@
\howwide
Seldom.
-\ref{basic.start}
+\ref{basic.start.main}
\change The \tcode{main} function cannot be called recursively and cannot have its address taken.
\rationale
-The main function may require special actions.
+The \tcode{main} function may require special actions.
\effect
Deletion of semantically well-defined feature.
\difficulty
@@ -275,9 +275,8 @@
Seldom.
\ref{expr.cond}, \ref{expr.ass}, \ref{expr.comma}
-
\indextext{conversion!lvalue-to-rvalue}%
-\indextext{rvalue!lvalue conversion~to}%
+\indextext{rvalue!lvalue conversion to}%
\indextext{lvalue}%
\change The result of a conditional expression, an assignment expression, or a comma expression may be an lvalue.
\rationale
@@ -398,8 +397,8 @@
Example:
\begin{codeblock}
-typedef struct name1 { /*...*/ } name1; // valid C and \Cpp
-struct name { /*...*/ };
+typedef struct name1 { @\commentellip@ } name1; // valid C and \Cpp
+struct name { @\commentellip@ };
typedef int name; // valid C, invalid \Cpp
\end{codeblock}
@@ -410,7 +409,7 @@
Example:
\begin{codeblock}
-class name { /*...*/ };
+class name { @\commentellip@ };
name i; // \tcode{i} has type \tcode{class name}
\end{codeblock}
@@ -452,7 +451,7 @@
void f(const parm); void f(const int parm);
const n = 3; const int n = 3;
main() int main()
- /* ... */ /* ... */
+ @\commentellip@ @\commentellip@
\end{codeblock}
\rationale
@@ -518,7 +517,7 @@
enum e { A };
sizeof(A) == sizeof(int) // in C
sizeof(A) == sizeof(e) // in \Cpp
-/* @\textit{\textrm{and \tcode{sizeof(int)} is not necessarily equal to \tcode{sizeof(e)}}}@ */
+/* and @sizeof(int)@ is not necessarily equal to @sizeof(e)@ */
\end{codeblock}
\rationale
@@ -591,7 +590,7 @@
\ref{dcl.fct.def}
\change In \Cpp, the syntax for function definition excludes the ``old-style'' C function.
-In C, ``old-style'' syntax is allowed, but deprecated as ``obsolescent.''
+In C, ``old-style'' syntax is allowed, but deprecated as ``obsolescent''.
\rationale
Prototypes are essential to type safety.
\effect
@@ -614,7 +613,7 @@
\end{codeblock}
\rationale
When these non-terminated arrays are manipulated by standard
-string routines, there is potential for major catastrophe.
+string functions, there is potential for major catastrophe.
\effect
Deletion of semantically well-defined feature.
\difficulty
@@ -639,8 +638,8 @@
int x[99];
void f() {
struct x { int a; };
- sizeof(x); /* @\textit{\textrm{size of the array in C}}@ */
- /* @\textit{\textrm{size of the struct in \Cpp}}@ */
+ sizeof(x); /* size of the array in C */
+ /* size of the struct in @\textit{\textrm{\Cpp}}@ */
}
\end{codeblock}
\rationale
@@ -668,7 +667,7 @@
\ref{class.bit}
\change
-\indextext{bit-field!implementation-defined sign~of}%
+\indextext{bit-field!implementation-defined sign of}%
Bit-fields of type plain \tcode{int} are signed.
\rationale
Leaving the choice of signedness to implementations could lead to
@@ -690,7 +689,7 @@
\begin{codeblock}
struct X {
- struct Y { /* ... */ } y;
+ struct Y { @\commentellip@ } y;
};
struct Y yy; // valid C, invalid \Cpp
\end{codeblock}
@@ -716,7 +715,7 @@
\begin{codeblock}
struct Y; // \tcode{struct Y} and \tcode{struct X} are at the same scope
struct X {
- struct Y { /* ... */ } y;
+ struct Y { @\commentellip@ } y;
};
\end{codeblock}
@@ -822,7 +821,7 @@
\rSec1[diff.cpp03]{\Cpp and ISO \CppIII}
\pnum
-\indextext{summary!compatibility~with ISO \CppIII}%
+\indextext{summary!compatibility with ISO \CppIII}%
This subclause lists the differences between \Cpp and
ISO \CppIII (ISO/IEC 14882:2003, \doccite{Programming Languages --- \Cpp}),
by the chapters of this document.
@@ -968,8 +967,8 @@
\rationale Clarification of destructor requirements.
\effect
Valid \CppIII code may execute differently in this International Standard. In
-particular, destructors that throw exceptions will call \tcode{std::terminate()}
-(without calling \tcode{std::unexpected()}) if their exception specification is
+particular, destructors that throw exceptions will call \tcode{std::terminate}
+(without calling \tcode{std::unexpected}) if their exception specification is
non-throwing.
\rSec2[diff.cpp03.temp]{Clause \ref{temp}: templates}
@@ -990,9 +989,9 @@
Change to semantics of well-defined expression. A valid \CppIII expression
containing a right angle bracket (``\tcode{>}'') followed immediately by
another right angle bracket may now be treated as closing two templates.
-For example, the following code is valid in \CppIII because ``\tcode{\shr}''
+For example, the following code is valid in \CppIII because ``\tcode{>>}''
is a right-shift operator, but invalid in this International Standard because
-``\tcode{\shr}'' closes two templates.
+``\tcode{>>}'' closes two templates.
\begin{codeblock}
template struct X { };
@@ -1279,7 +1278,7 @@
binary representation of the required template specializations of
\tcode{std::complex} may not be compatible with this International Standard.
-\rSec2[diff.cpp03.input.output]{Clause \ref{input.output}: Input/output library}
+\rSec2[diff.cpp03.input.output]{Clause \ref{input.output}: input/output library}
\ref{istream::sentry},
\ref{ostream::sentry},
@@ -1331,7 +1330,7 @@
\rSec1[diff.cpp11]{\Cpp and ISO \CppXI}
\pnum
-\indextext{summary!compatibility~with ISO \CppXI}%
+\indextext{summary!compatibility with ISO \CppXI}%
This subclause lists the differences between \Cpp and
ISO \CppXI (ISO/IEC 14882:2011, \doccite{Programming Languages --- \Cpp}),
by the chapters of this document.
@@ -1470,7 +1469,7 @@
\rSec1[diff.cpp14]{\Cpp and ISO \CppXIV}
\pnum
-\indextext{summary!compatibility~with ISO \CppXIV}%
+\indextext{summary!compatibility with ISO \CppXIV}%
This subclause lists the differences between \Cpp and
ISO \CppXIV (ISO/IEC 14882:2014, \doccite{Programming Languages --- \Cpp}),
by the chapters of this document.
@@ -1501,7 +1500,7 @@
\begin{codeblock}
#define F(a) b ## a
-int b0p = F(0p+0); // ill-formed; equivalent to ``\tcode{int b0p = b0p + 0;}\!'' in C++ 2014
+int b0p = F(0p+0); // ill-formed; equivalent to ``\tcode{int b0p = b0p + 0;}\!'' in \CppXIV
\end{codeblock}
\rSec2[diff.cpp14.expr]{Clause \ref{expr}: expressions}
@@ -1667,7 +1666,7 @@
Valid \CppXIV code that uses such a top-level namespace,
e.g., \tcode{std2}, may be invalid in this International Standard.
-\rSec2[diff.cpp14.utilities]{Clause \ref{utilities}: General utilities library}
+\rSec2[diff.cpp14.utilities]{Clause \ref{utilities}: general utilities library}
\ref{func.wrap}
\change Constructors taking allocators removed.
@@ -1778,8 +1777,8 @@
nor are the C headers themselves part of \Cpp.
\pnum
-The headers \tcode{}\indextext{\idxhdr{ccomplex}}~(\ref{ccomplex.syn})
-and \tcode{}\indextext{\idxhdr{ctgmath}}~(\ref{ctgmath.syn}), as well
+The headers \tcode{}\indextext{\idxhdr{ccomplex}} (\ref{ccomplex.syn})
+and \tcode{}\indextext{\idxhdr{ctgmath}} (\ref{ctgmath.syn}), as well
as their corresponding C headers \tcode{}\indextext{\idxhdr{complex.h}}
and \tcode{}\indextext{\idxhdr{tgmath.h}}, do not contain any of the
content from the C standard library and instead merely include other headers
diff --git a/source/config.tex b/source/config.tex
index e56d161432..c3e390cbc7 100644
--- a/source/config.tex
+++ b/source/config.tex
@@ -1,8 +1,8 @@
%!TEX root = std.tex
%%--------------------------------------------------
%% Version numbers
-\newcommand{\docno}{N4618}
-\newcommand{\prevdocno}{N4606}
+\newcommand{\docno}{N4640}
+\newcommand{\prevdocno}{N4618}
\newcommand{\cppver}{201402L}
%% Release date
diff --git a/source/containers.tex b/source/containers.tex
index 3f72105dd4..ac57a3f52b 100644
--- a/source/containers.tex
+++ b/source/containers.tex
@@ -56,11 +56,10 @@
\pnum
For the components affected by this subclause that declare an \tcode{allocator_type},
-objects stored in these components shall be constructed using the
-\tcode{allocator_traits::rebind_traits::construct} function
-and destroyed using the
-\tcode{allocator_traits::rebind_traits::destroy}
-function~(\ref{allocator.traits.members}),
+objects stored in these components shall be constructed using the function
+\tcode{allocator_traits::rebind_traits::\brk{}construct}
+and destroyed using the function
+\tcode{allocator_traits::rebind_traits::\brk{}destroy}~(\ref{allocator.traits.members}),
where \tcode{U} is either \tcode{allocator_type::value_type} or
an internal type used by the container.
These functions are called only for the
@@ -143,20 +142,20 @@
\tcode{X u;} &
&
&
- post: \tcode{u.empty()} &
+ \postconditions \tcode{u.empty()} &
constant \\ \rowsep
\tcode{X()} &
&
&
- post: \tcode{X().empty()} &
+ \postconditions \tcode{X().empty()} &
constant \\ \rowsep
\tcode{X(a)} &
&
&
\requires \tcode{T} is \tcode{CopyInsertable}
- into \tcode{X} (see below).\br post: \tcode{a == X(a)}. &
+ into \tcode{X} (see below).\br \postconditions \tcode{a == X(a)}. &
linear \\ \rowsep
\tcode{X u(a);}\br
@@ -165,14 +164,14 @@
&
\requires \tcode{T} is \tcode{CopyInsertable}
into \tcode{X} (see below).\br
- post: \tcode{u == a} &
+ \postconditions \tcode{u == a} &
linear \\ \rowsep
\tcode{X u(rv);}\br
\tcode{X u = rv;} &
&
&
- post: \tcode{u} shall be equal to the value that \tcode{rv} had before this construction
+ \postconditions \tcode{u} shall be equal to the value that \tcode{rv} had before this construction
&
(Note B) \\ \rowsep
@@ -245,7 +244,7 @@
\tcode{r = a} &
\tcode{X\&} &
&
- post: \tcode{r == a}. &
+ \postconditions \tcode{r == a}. &
linear \\ \rowsep
\tcode{a.size()} &
@@ -272,13 +271,13 @@
\end{libreqtab5}
-Notes: the algorithm
-\tcode{equal()}
-is defined in Clause~\ref{algorithms}.
Those entries marked ``(Note A)'' or ``(Note B)''
have linear complexity for \tcode{array} and have constant complexity
for all other standard containers.
-
+\begin{note}
+The algorithm \tcode{equal()} is defined in Clause~\ref{algorithms}.
+\end{note}
+
\pnum
The member function \tcode{size()} returns the number of elements in the container.
The number of elements is defined by the rules of
@@ -488,7 +487,7 @@
\tcode{a < b} &
convertible to \tcode{bool} &
\tcode{lexicographical_compare( a.begin(), a.end(), b.begin(), b.end())} &
- pre: \tcode{<} is defined for values of \tcode{T}. \tcode{<} is a total ordering relationship. &
+ \requires \tcode{<} is defined for values of \tcode{T}. \tcode{<} is a total ordering relationship. &
linear \\ \rowsep
\tcode{a > b} &
@@ -515,7 +514,7 @@
\end{note}
\pnum
-All of the containers defined in this Clause and in~(\ref{basic.string}) except \tcode{array}
+All of the containers defined in this Clause and in~\ref{basic.string} except \tcode{array}
meet the additional requirements of an allocator-aware container, as described in
Table~\ref{tab:containers.allocatoraware}.
@@ -639,13 +638,13 @@
\tcode{X u;} &
&
\requires\ \tcode{A} is \tcode{DefaultConstructible}.\br
- post: \tcode{u.empty()} returns \tcode{true},
+ \postconditions \tcode{u.empty()} returns \tcode{true},
\tcode{u.get_allocator() == A()} &
constant \\ \rowsep
\tcode{X(m)} &
&
-post: \tcode{u.empty()} returns \tcode{true}, &
+\postconditions \tcode{u.empty()} returns \tcode{true}, &
constant \\
\tcode{X u(m);} &
&
@@ -656,14 +655,14 @@
\tcode{X u(t, m);} &
&
\requires\ \tcode{T} is \tcode{CopyInsertable} into \tcode{X}.\br
-post: \tcode{u == t}, \tcode{u.get_allocator() == m} &
+\postconditions \tcode{u == t}, \tcode{u.get_allocator() == m} &
linear \\ \rowsep
\tcode{X(rv)}\br
\tcode{X u(rv);}
&
&
- post: \tcode{u} shall have the same elements as \tcode{rv} had before this
+ \postconditions \tcode{u} shall have the same elements as \tcode{rv} had before this
construction; the value of \tcode{u.get_allocator()} shall be the same as the
value of \tcode{rv.get_allocator()} before this construction. &
constant \\ \rowsep
@@ -673,7 +672,7 @@
&
\requires\ \tcode{T} is
\tcode{MoveInsertable} into \tcode{X}.\br
- post: \tcode{u} shall have the same elements,
+ \postconditions \tcode{u} shall have the same elements,
or copies of the elements, that \tcode{rv} had before
this construction, \tcode{u.get_allocator() == m} &
constant if \tcode{m ==} \tcode{rv.get_allocator()}, otherwise linear \\ \rowsep
@@ -683,7 +682,7 @@
\requires\ \tcode{T} is
\tcode{CopyInsertable} into \tcode{X}
and \tcode{CopyAssignable}.\br
- post: \tcode{a == t} &
+ \postconditions \tcode{a == t} &
linear \\ \rowsep
\tcode{a = rv} &
@@ -696,7 +695,7 @@
\tcode{MoveInsertable} into \tcode{X} and
\tcode{MoveAssignable}. All existing elements of \tcode{a}
are either move assigned to or destroyed.\br
- post: \tcode{a} shall be equal to the value that \tcode{rv} had before
+ \postconditions \tcode{a} shall be equal to the value that \tcode{rv} had before
this assignment. &
linear \\ \rowsep
@@ -717,7 +716,7 @@
associative or unordered associative containers, \tcode{operator[]}.
\pnum
-Notwithstanding~(\ref{res.on.data.races}), implementations are required to avoid data
+Notwithstanding~\ref{res.on.data.races}, implementations are required to avoid data
races when the contents of the contained object in different elements in the same
container, excepting \tcode{vector}, are modified concurrently.
@@ -806,7 +805,7 @@
&
\requires\ \tcode{T} shall be
\tcode{CopyInsertable} into \tcode{X}.\br
- post: \tcode{distance(begin(), end()) == n}\br
+ \postconditions \tcode{distance(begin(), end()) == n}\br
Constructs a sequence container with \tcode{n} copies of \tcode{t} \\ \rowsep
\tcode{X(i, j)}\br
@@ -818,7 +817,7 @@
shall also be
\tcode{MoveInsertable} into \tcode{X}.
Each iterator in the range \range{i}{j} shall be dereferenced exactly once.\br
- post: \tcode{distance(begin(), end()) ==}
+ \postconditions \tcode{distance(begin(), end()) ==}
\tcode{distance(i, j)}\br
Constructs a sequence container equal to the range \tcode{[i, j)} \\ \rowsep
@@ -872,7 +871,7 @@
\tcode{MoveInsertable} into \tcode{X}, \tcode{MoveConstructible}, \tcode{MoveAssignable},
and swappable~(\ref{swappable.requirements}).
Each iterator in the range \range{i}{j} shall be dereferenced exactly once.\br
- pre: \tcode{i} and \tcode{j} are not iterators into \tcode{a}.\br
+ \requires \tcode{i} and \tcode{j} are not iterators into \tcode{a}.\br
Inserts copies of elements in \tcode{[i, j)} before \tcode{p} \\ \rowsep
\tcode{a.insert(p, il)} &
@@ -895,7 +894,7 @@
\tcode{void} &
Destroys all elements in \tcode{a}. Invalidates all references, pointers, and
iterators referring to the elements of \tcode{a} and may invalidate the past-the-end iterator.\br
- post: \tcode{a.empty()} returns \tcode{true}.\br
+ \postconditions \tcode{a.empty()} returns \tcode{true}.\br
\complexity Linear. \\ \rowsep
\tcode{a.assign(i,j)} &
@@ -906,7 +905,7 @@
shall also be
\tcode{MoveInsertable} into \tcode{X}.\br
Each iterator in the range \range{i}{j} shall be dereferenced exactly once.\br
- pre: \tcode{i}, \tcode{j} are not iterators into \tcode{a}.\br
+ \requires \tcode{i}, \tcode{j} are not iterators into \tcode{a}.\br
Replaces elements in \tcode{a} with a copy of \tcode{[i, j)}.\br
Invalidates all references, pointers and iterators
referring to the elements of \tcode{a}.
@@ -922,7 +921,7 @@
\requires\ \tcode{T} shall be
\tcode{CopyInsertable} into \tcode{X}
and \tcode{CopyAssignable}.\br
- pre: \tcode{t} is not a reference into \tcode{a}.\br
+ \requires \tcode{t} is not a reference into \tcode{a}.\br
Replaces elements in \tcode{a} with \tcode{n} copies of \tcode{t}.\br
Invalidates all references, pointers and iterators
referring to the elements of \tcode{a}.
@@ -970,7 +969,7 @@
\pnum
The iterator returned by
-\tcode{a.erase(q1,q2)}
+\tcode{a.erase(q1, q2)}
points to the element pointed to by
\tcode{q2}
prior to any elements being erased.
@@ -980,33 +979,30 @@
\pnum
For every sequence container defined in this Clause and in Clause~\ref{strings}:
-
\begin{itemize}
\item If the constructor
-
\begin{codeblock}
template
-X(InputIterator first, InputIterator last,
- const allocator_type& alloc = allocator_type());
+ X(InputIterator first, InputIterator last,
+ const allocator_type& alloc = allocator_type());
\end{codeblock}
-
is called with a type \tcode{InputIterator} that does not qualify as an input
iterator, then the constructor
shall not participate in overload resolution.
\item If the member functions of the forms:
-
\begin{codeblock}
-template // such as insert()
- rt fx1(const_iterator p, InputIterator first, InputIterator last);
+template
+ @\placeholdernc{return-type}@ @\placeholdernc{F}@(const_iterator p,
+ InputIterator first, InputIterator last); // such as \tcode{insert}
-template // such as append(), assign()
- rt fx2(InputIterator first, InputIterator last);
+template
+ @\placeholdernc{return-type}@ @\placeholdernc{F}@(InputIterator first, InputIterator last); // such as \tcode{append}, \tcode{assign}
-template // such as replace()
- rt fx3(const_iterator i1, const_iterator i2, InputIterator first, InputIterator last);
+template
+ @\placeholdernc{return-type}@ @\placeholdernc{F}@(const_iterator i1, const_iterator i2,
+ InputIterator first, InputIterator last); // such as \tcode{replace}
\end{codeblock}
-
are called with a type \tcode{InputIterator} that does not qualify as an input
iterator, then these functions
shall not participate in overload resolution.
@@ -1230,36 +1226,42 @@
\begin{codeblock}
template<@\unspecnc@>
-class @\textit{node_handle}@ {
-public:
- // These type declarations are described in Tables \ref{tab:containers.associative.requirements} and \ref{tab:HashRequirements}
- using value_type = @\seebelownc{}@; // Not present for map containers
- using key_type = @\seebelownc{}@; // Not present for set containers
- using mapped_type = @\seebelownc{}@; // Not present for set containers
- using allocator_type = @\seebelownc{}@;
-
-private:
- using container_node_type = @\unspecnc@;
- using ator_traits = allocator_traits;
- typename ator_traits::rebind_traits::pointer ptr_;
- optional alloc_;
-
-public:
- constexpr @\textit{node_handle}@() noexcept : ptr_(), alloc_() {}
- ~@\textit{node_handle}@();
- @\textit{node_handle}@(@\textit{node_handle}@&&) noexcept;
- @\textit{node_handle}@& operator=(@\textit{node_handle}@&&);
- value_type& value() const; // Not present for map containers
- key_type& key() const; // Not present for set containers
- mapped_type& mapped() const; // Not present for set containers
- allocator_type get_allocator() const;
- explicit operator bool() const noexcept;
- bool empty() const noexcept;
- void swap(@\textit{node_handle}@&)
- noexcept(ator_traits::propagate_on_container_swap::value ||
- ator_traits::is_always_equal::value);
- friend void swap(@\textit{node_handle}@& x, @\textit{node_handle}@& y) noexcept(noexcept(x.swap(y)))
- { x.swap(y); }
+ class @\textit{node_handle}@ {
+ public:
+ // These type declarations are described in Tables \ref{tab:containers.associative.requirements} and \ref{tab:HashRequirements}.
+ using value_type = @\seebelownc{}@; // not present for map containers
+ using key_type = @\seebelownc{}@; // not present for set containers
+ using mapped_type = @\seebelownc{}@; // not present for set containers
+ using allocator_type = @\seebelownc{}@;
+
+ private:
+ using container_node_type = @\unspecnc@;
+ using ator_traits = allocator_traits;
+
+ typename ator_traits::rebind_traits