-
c ISO 2013 All rights reserved
ISO/IEC JTC1 SC22 WG21 N3690Date: 2013-05-15
ISO/IEC CD 14882ISO/IEC JTC1 SC22
Secretariat: ANSI
Programming Languages C++Langages de programmation C++
Warning
This document is not an ISO International Standard. It is
distributed for review and comment. It is subjectto change without
notice and may not be referred to as an International Standard.
Recipients of this draft are invited to submit, with their
comments, notification of any relevant patent rightsof which they
are aware and to provide supporting documentation.
Document type: International StandardDocument subtype:Document
stage: (30) CommitteeDocument language: E
-
c ISO/IEC N3690
Copyright notice
This ISO document is a working draft or committee draft and is
copyright-protected by ISO. While thereproduction of working drafts
or committee drafts in any form for use by participants in the ISO
standardsdevelopment process is permitted without prior permission
from ISO, neither this document nor any extractfrom it may be
reproduced, stored or transmitted in any form for any other purpose
without prior writtenpermission from ISO.
Requests for permission to reproduce this document for the
purpose of selling it should be addressed asshown below or to ISOs
member body in the country of the requestor.
ISO copyright officeCase postale 56, CH-1211 Geneva 20Tel. + 41
22 749 01 11Fax + 41 22 749 09 47E-mail [email protected]
www.iso.org
Reproduction for sales purposes may be subject to royalty
payments or a licensing agreement.
Violators may be prosecuted.
ii
-
c ISO/IEC N3690
ContentsContents iii
List of Tables xi
List of Figures xv
1 General 11.1 Scope . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Normative
references . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 11.3 Terms and definitions . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21.4 Implementation compliance . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 51.5 Structure of this
International Standard . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 51.6 Syntax notation . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 61.7 The C++
memory model . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 61.8 The C++ object model . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.9
Program execution . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 81.10 Multi-threaded executions and
data races . . . . . . . . . . . . . . . . . . . . . . . . . . . .
111.11 Acknowledgments . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 15
2 Lexical conventions 162.1 Separate translation . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
162.2 Phases of translation . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 162.3 Character sets . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 172.4 Trigraph sequences . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 182.5
Preprocessing tokens . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 192.6 Alternative tokens . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 202.7 Tokens . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 202.8 Comments . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 202.9 Header names . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.10
Preprocessing numbers . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 212.11 Identifiers . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 212.12 Keywords . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 222.13 Operators
and punctuators . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 222.14 Literals . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3 Basic concepts 323.1 Declarations and definitions . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.2
One definition rule . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 343.3 Scope . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 373.4 Name lookup . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 423.5 Program and
linkage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 563.6 Start and termination . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.7
Storage duration . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 623.8 Object lifetime . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 663.9 Types . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 693.10 Lvalues and
rvalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 74
Contents iii
-
c ISO/IEC N3690
3.11 Alignment . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 76
4 Standard conversions 774.1 Lvalue-to-rvalue conversion . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
784.2 Array-to-pointer conversion . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 784.3 Function-to-pointer
conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 784.4 Qualification conversions . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 784.5
Integral promotions . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 804.6 Floating point promotion .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 804.7 Integral conversions . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 804.8 Floating point
conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 804.9 Floating-integral conversions . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814.10
Pointer conversions . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 814.11 Pointer to member
conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 814.12 Boolean conversions . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 824.13 Integer
conversion rank . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 82
5 Expressions 835.1 Primary expressions . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 865.2
Postfix expressions . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 965.3 Unary expressions . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 1075.4 Explicit type conversion (cast notation) . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 1155.5
Pointer-to-member operators . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 1165.6 Multiplicative operators . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 1165.7 Additive operators . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 1175.8 Shift operators .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 1185.9 Relational operators . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185.10
Equality operators . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 1195.11 Bitwise AND operator . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 1205.12 Bitwise exclusive OR operator . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 1205.13 Bitwise
inclusive OR operator . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 1205.14 Logical AND operator . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1205.15 Logical OR operator . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 1205.16 Conditional
operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 1215.17 Assignment and compound assignment
operators . . . . . . . . . . . . . . . . . . . . . . . . 1225.18
Comma operator . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 1235.19 Constant expressions . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 123
6 Statements 1276.1 Labeled statement . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1276.2
Expression statement . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 1276.3 Compound statement or
block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 1276.4 Selection statements . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 1286.5 Iteration
statements . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 1296.6 Jump statements . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1326.7 Declaration statement . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 1336.8 Ambiguity resolution
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 134
7 Declarations 1367.1 Specifiers . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377.2
Enumeration declarations . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 154
Contents iv
-
c ISO/IEC N3690
7.3 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 1577.4 The asm declaration
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 1707.5 Linkage specifications . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 1707.6
Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 173
8 Declarators 1778.1 Type names . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1788.2
Ambiguity resolution . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 1798.3 Meaning of declarators . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 1808.4 Function definitions . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 1928.5 Initializers
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 195
9 Classes 2109.1 Class names . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 2129.2 Class
members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 2149.3 Member functions . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2169.4 Static members . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 2199.5 Unions . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 2209.6 Bit-fields . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2229.7
Nested class declarations . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 2229.8 Local class declarations .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 2249.9 Nested type names . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 224
10 Derived classes 22510.1 Multiple base classes . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22610.2 Member name lookup . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 22810.3 Virtual functions . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 23110.4 Abstract classes . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
11 Member access control 23711.1 Access specifiers . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 23811.2 Accessibility of base classes and base class members .
. . . . . . . . . . . . . . . . . . . . . . 23911.3 Friends . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 24211.4 Protected member access . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24511.5
Access to virtual functions . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 24611.6 Multiple access . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 24611.7 Nested classes . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 246
12 Special member functions 24812.1 Constructors . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 24812.2 Temporary objects . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 25012.3 Conversions . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 25212.4 Destructors . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25512.5
Free store . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 25812.6 Initialization . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 26012.7 Construction and destruction . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 26512.8
Copying and moving class objects . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 26812.9 Inheriting constructors . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 275
13 Overloading 27913.1 Overloadable declarations . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Contents v
-
c ISO/IEC N3690
13.2 Declaration matching . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 28113.3 Overload
resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 28213.4 Address of overloaded function .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30113.5 Overloaded operators . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 30213.6 Built-in
operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 306
14 Templates 31014.1 Template parameters . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 31114.2
Names of template specializations . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 31414.3 Template arguments . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 31614.4 Type equivalence . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 32214.5 Template
declarations . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 32314.6 Name resolution . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33914.7 Template instantiation and specialization . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 35314.8 Function template
specializations . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 365
15 Exception handling 38615.1 Throwing an exception . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38715.2 Constructors and destructors . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 38915.3 Handling an
exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 38915.4 Exception specifications . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39115.5 Special functions . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 394
16 Preprocessing directives 39716.1 Conditional inclusion . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 39816.2 Source file inclusion . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 39916.3 Macro
replacement . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 40016.4 Line control . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 40516.5 Error directive . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 40516.6 Pragma
directive . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 40616.7 Null directive . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 40616.8 Predefined macro names . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 40616.9 Pragma operator .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 407
17 Library introduction 40817.1 General . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 40817.2 The C standard library . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 40917.3 Definitions . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 40917.4 Additional definitions . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41217.5 Method of description (Informative) . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 41217.6 Library-wide
requirements . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 417
18 Language support library 43618.1 General . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 43618.2 Types . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 43618.3
Implementation properties . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 43718.4 Integer types . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 44618.5 Start and termination . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 44818.6 Dynamic
memory management . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 44918.7 Type identification . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45518.8
Exception handling . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 457
Contents vi
-
c ISO/IEC N3690
18.9 Initializer lists . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 46218.10 Other
runtime support . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 463
19 Diagnostics library 46619.1 General . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46619.2 Exception classes . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 46619.3 Assertions . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 47019.4 Error numbers . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47019.5
System error support . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 470
20 General utilities library 48220.1 General . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 48220.2 Utility components . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 48220.3 Pairs . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 48720.4 Tuples . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49220.5 Compile-time integer sequences . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 50220.6 Optional objects .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 50320.7 Class template bitset . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 51320.8
Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 52020.9 Smart pointers . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 53520.10 Function objects . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 56220.11
Metaprogramming and type traits . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 58420.12 Compile-time rational
arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 60320.13 Time utilities . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 60620.14
Class template scoped_allocator_adaptor . . . . . . . . . . . . . .
. . . . . . . . . . . . . 62220.15 Class type_index . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
629
21 Strings library 63121.1 General . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63121.2 Character traits . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 63121.3 String classes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 63721.4 Class template basic_string . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64121.5
Numeric conversions . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 66921.6 Hash support . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 67121.7 Suffix for basic_string literals . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 67121.8
Null-terminated sequence utilities . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 671
22 Localization library 67522.1 General . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 67522.2 Header synopsis . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 67522.3 Locales . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 67622.4 Standard locale categories . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 68922.5 Standard
code conversion facets . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 72922.6 C library locales . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
731
23 Containers library 73223.1 General . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73223.2 Container requirements . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 73223.3 Sequence
containers . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 76023.4 Associative containers . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79523.5 Unordered associative containers . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 812
Contents vii
-
c ISO/IEC N3690
23.6 Container adaptors . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 829
24 Iterators library 83924.1 General . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83924.2 Iterator requirements . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 83924.3 Header synopsis .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 84424.4 Iterator primitives . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 84724.5 Iterator
adaptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 85124.6 Stream iterators . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 86424.7 range access . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 871
25 Algorithms library 87325.1 General . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87325.2 Non-modifying sequence operations . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 88425.3 Mutating sequence
operations . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 88925.4 Sorting and related operations . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 89725.5 C
library algorithms . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 910
26 Numerics library 91226.1 General . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91226.2 Numeric type requirements . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 91226.3 The floating-point
environment . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 91326.4 Complex numbers . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 91426.5 Random
number generation . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 92426.6 Numeric arrays . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96926.7 Generalized numeric operations . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 99026.8 C library . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 993
27 Input/output library 99827.1 General . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 99827.2 Iostreams requirements . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 99827.3 Forward
declarations . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 99927.4 Standard iostream objects . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
100127.5 Iostreams base classes . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 100327.6 Stream buffers .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 102227.7 Formatting and manipulators . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103227.8
String-based streams . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 106127.9 File-based streams . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 1072
28 Regular expressions library 108828.1 General . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 108828.2 Definitions . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 108828.3
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 108928.4 Header synopsis . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
109128.5 Namespace std::regex_constants . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 109728.6 Class regex_error . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 110128.7 Class template regex_traits . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 110128.8 Class
template basic_regex . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 110428.9 Class template sub_match . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
110928.10 Class template match_results . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 111628.11 Regular
expression algorithms . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 1122
Contents viii
-
c ISO/IEC N3690
28.12 Regular expression iterators . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 112728.13 Modified
ECMAScript regular expression grammar . . . . . . . . . . . . . . .
. . . . . . . . 1133
29 Atomic operations library 113629.1 General . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 113629.2 Header synopsis . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 113629.3 Order and
consistency . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 113929.4 Lock-free property . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
114229.5 Atomic types . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 114229.6 Operations on
atomic types . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 114529.7 Flag type and operations . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
115129.8 Fences . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 1152
30 Thread support library 115430.1 General . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 115430.2 Requirements . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 115430.3 Threads . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 115730.4 Mutual exclusion . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
116230.5 Condition variables . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 118230.6 Futures . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 1191
A Grammar summary 1208A.1 Keywords . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1208A.2 Lexical conventions . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 1208A.3 Basic concepts .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 1212A.4 Expressions . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213A.5
Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 1216A.6 Declarations . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 1217A.7 Declarators . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 1221A.8 Classes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 1223A.9 Derived classes . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 1223A.10 Special member functions . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 1224A.11 Overloading . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 1224A.12 Templates . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1224A.13 Exception handling . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 1225A.14 Preprocessing
directives . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 1226
B Implementation quantities 1228
C Compatibility 1230C.1 C++ and ISO C . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1230C.2
C++ and ISO C++ 2003 . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 1238C.3 C++ and ISO C++ 2011 . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1245C.4 C standard library . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 1245
D Compatibility features 1249D.1 Increment operator with bool
operand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1249D.2 register keyword . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 1249D.3 Implicit
declaration of copy functions . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 1249D.4 Dynamic exception specifications .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1249D.5 C standard library headers . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 1249
Contents ix
-
c ISO/IEC N3690
D.6 Old iostreams members . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 1249D.7 char* streams . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 1251D.8 Function objects . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 1260D.9
Binders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 1264D.10 auto_ptr . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 1265D.11 Violating exception-specifications . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 1268
E Universal character names for identifier characters 1269E.1
Ranges of characters allowed . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 1269E.2 Ranges of characters
disallowed initially . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 1269
F Cross references 1270
Index 1288
Index of grammar productions 1317
Index of library names 1320
Index of implementation-defined behavior 1357
Contents x
-
c ISO/IEC N3690
List of Tables1 Trigraph sequences . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Alternative tokens . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 203 Identifiers with
special meaning . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 224 Keywords . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
225 Alternative representations . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 226 Types of integer
constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 247 Escape sequences . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
268 String literal concatenations . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 29
9 Relations on const and volatile . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 74
10 simple-type-specifiers and the types they specify . . . . . .
. . . . . . . . . . . . . . . . . . . . . 149
11 Relationship between operator and function call notation . .
. . . . . . . . . . . . . . . . . . . . 28712 Conversions . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 295
13 Library categories . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 40814 C++ library
headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 41815 C++ headers for C library
facilities . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 41816 C++ headers for freestanding implementations .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 41917
EqualityComparable requirements . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 42018 LessThanComparable
requirements . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 42019 DefaultConstructible requirements . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 42120
MoveConstructible requirements . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 42121 CopyConstructible
requirements (in addition to MoveConstructible) . . . . . . . . . .
. . . . 42122 MoveAssignable requirements . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 42123
CopyAssignable requirements (in addition to MoveAssignable) . . . .
. . . . . . . . . . . . . . 42124 Destructible requirements . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 42125 NullablePointer requirements . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 42326 Hash requirements
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 42427 Descriptive variable definitions . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42428 Allocator requirements . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 425
29 Language support library summary . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 43630 Header synopsis . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 43631 Header synopsis . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 44632 Header synopsis . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 44633 Header synopsis . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 44834 Header synopsis . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46435 Header synopsis . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 46436 Header synopsis . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46437
Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 46538 Header synopsis . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 46539
Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 46540 Header synopsis . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
List of Tables xi
-
c ISO/IEC N3690
41 Diagnostics library summary . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 46642 Header synopsis . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 47043 Header synopsis . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 471
44 General utilities library summary . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 48245 Header synopsis .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 53546 Header synopsis . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 53547 Primary type category
predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 58948 Composite type category predicates . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59049
Type property predicates . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 59050 Type property queries .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 59651 Type relationship predicates . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59652
Const-volatile modifications . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 59853 Reference
modifications . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 59854 Sign modifications . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 59955 Array modifications . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 60056 Pointer
modifications . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 60057 Other transformations . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 60158 Expressions used to perform ratio arithmetic . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 60559 Clock
requirements . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 60960 Header synopsis . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
622
61 Strings library summary . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 63162 Character traits
requirements . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 63263 basic_string(const Allocator&)
effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64564 basic_string(const basic_string&) effects . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 64665 basic_string(const
basic_string&, size_type, size_type, const Allocator&)
effects . 64666 basic_string(const charT*, size_type, const
Allocator&) effects . . . . . . . . . . . . . . 64767
basic_string(const charT*, const Allocator&) effects . . . . .
. . . . . . . . . . . . . . . . 64768 basic_string(size_t, charT,
const Allocator&) effects . . . . . . . . . . . . . . . . . . .
. 64769 basic_string(const basic_string&, const Allocator&)
and basic_string(basic_string&&,
const Allocator&) effects . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 64870 operator=(const
basic_string&) effects . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 64871 operator=(basic_string&&) effects
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64972 compare() results . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 66373 Potential
mbstate_t data races . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 67374 Header synopsis . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67375
Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 67376 Header synopsis . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67377
Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 67478 Header synopsis . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67479
Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 674
80 Localization library summary . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 67581 Locale category
facets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 67982 Required specializations . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 67983 do_in/do_out result values . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 69984 do_unshift
result values . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 69985 Integer conversions . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 70386 Length modifier . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 70387 Integer
conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 707
List of Tables xii
-
c ISO/IEC N3690
88 Floating-point conversions . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 70789 Length modifier
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 70890 Numeric conversions . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70891 Fill padding . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 70992 do_get_date
effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 71693 Header synopsis . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73194
Potential setlocale data races . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 731
95 Containers library summary . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 73296 Container
requirements . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 73397 Reversible container requirements
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 73598 Optional container operations . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 73699
Allocator-aware container requirements . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 737100 Sequence container
requirements (in addition to container) . . . . . . . . . . . . . .
. . . . . . . 739101 Optional sequence container operations . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 742102
Associative container requirements (in addition to container) . . .
. . . . . . . . . . . . . . . . . 744103 Unordered associative
container requirements (in addition to container) . . . . . . . . .
. . . . . 751
104 Iterators library summary . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 839105 Relations
among iterator categories . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 839106 Iterator requirements . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 840107 Input iterator requirements (in addition to
Iterator) . . . . . . . . . . . . . . . . . . . . . . . . . 841108
Output iterator requirements (in addition to Iterator) . . . . . .
. . . . . . . . . . . . . . . . . . 842109 Forward iterator
requirements (in addition to input iterator) . . . . . . . . . . .
. . . . . . . . . 843110 Bidirectional iterator requirements (in
addition to forward iterator) . . . . . . . . . . . . . . . . .
843111 Random access iterator requirements (in addition to
bidirectional iterator) . . . . . . . . . . . . 844
112 Algorithms library summary . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 873113 Header synopsis .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 910
114 Numerics library summary . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 912115 Seed sequence
requirements . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 926116 Uniform random number generator
requirements . . . . . . . . . . . . . . . . . . . . . . . . . . .
927117 Random number engine requirements . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 928118 Random number
distribution requirements . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 931119 Header synopsis . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 994120 Header
synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 994
121 Input/output library summary . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 998122 fmtflags effects .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 1008123 fmtflags constants . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1008124 iostate effects . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 1008125 openmode
effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 1008126 seekdir effects . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 1009127 Position type requirements . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013128
basic_ios::init() effects . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 1015129 basic_ios::copyfmt()
effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 1017130 seekoff positioning . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065131
newoff values . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 1065132 File open modes . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 1075133 seekoff effects . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1078
List of Tables xiii
-
c ISO/IEC N3690
134 Header synopsis . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 1086135 Header synopsis . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1086
136 Regular expressions library summary . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 1088137 Regular
expression traits class requirements . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 1089138 syntax_option_type effects .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 1098139 regex_constants::match_flag_type effects when
obtaining a match against a character con-
tainer sequence [first,last). . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 1099140 error_type values
in the C locale . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 1100141 match_results assignment operator effects
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119142
Effects of regex_match algorithm . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 1122143 Effects of regex_search
algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 1124
144 Atomics library summary . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 1136145 atomic integral
typedefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 1145146 atomic typedefs . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 1146147
Atomic arithmetic computations . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 1150
148 Thread support library summary . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 1154
149 Standard macros . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 1245150 Standard
values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 1246151 Standard types . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 1246152 Standard structs . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246153
Standard functions . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 1247
154 C headers . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 1249155
strstreambuf(streamsize) effects . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 1253156 strstreambuf(void*
(*)(size_t), void (*)(void*)) effects . . . . . . . . . . . . . . .
. . . 1253157 strstreambuf(charT*, streamsize, charT*) effects . .
. . . . . . . . . . . . . . . . . . . . . . 1253158 seekoff
positioning . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 1256159 newoff values . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 1256
List of Tables xiv
-
c ISO/IEC N3690
List of Figures1 Expression category taxonomy . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2 Directed acyclic graph . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 2263 Non-virtual base .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 2274 Virtual base . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2285 Virtual and non-virtual base . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 2286 Name lookup . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 230
7 Stream position, offset, and size types [non-normative] . . .
. . . . . . . . . . . . . . . . . . . . . 998
List of Figures xv
-
c ISO/IEC N3690
1 General [intro]1.1 Scope [intro.scope]
1 This International Standard specifies requirements for
implementations of the C++ programming language.The first such
requirement is that they implement the language, and so this
International Standard alsodefines C++. Other requirements and
relaxations of the first requirement appear at various places
withinthis International Standard.
2 C++ is a general purpose programming language based on the C
programming language as described inISO/IEC 9899:1999 Programming
languages C (hereinafter referred to as the C standard). In
addition tothe facilities provided by C, C++ provides additional
data types, classes, templates, exceptions, namespaces,operator
overloading, function name overloading, references, free store
management operators, and additionallibrary facilities.1.2
Normative references [intro.refs]
1 The following referenced documents are indispensable for the
application of this document. For dated refer-ences, only the
edition cited applies. For undated references, the latest edition
of the referenced document(including any amendments) applies. Ecma
International, ECMAScript Language Specification, Standard
Ecma-262, third edition, 1999.
ISO/IEC 2382 (all parts), Information technology Vocabulary
ISO/IEC 9899:1999, Programming languages C
ISO/IEC 9899:1999/Cor.1:2001(E), Programming languages C,
Technical Corrigendum 1
ISO/IEC 9899:1999/Cor.2:2004(E), Programming languages C,
Technical Corrigendum 2
ISO/IEC 9899:1999/Cor.3:2007(E), Programming languages C,
Technical Corrigendum 3
ISO/IEC 9945:2003, Information Technology Portable Operating
System Interface (POSIX)
ISO/IEC 10646-1:1993, Information technology Universal
Multiple-Octet Coded Character Set (UCS) Part 1: Architecture and
Basic Multilingual Plane
ISO/IEC TR 19769:2004, Information technology Programming
languages, their environments andsystem software interfaces
Extensions for the programming language C to support new
characterdata types
2 The library described in Clause 7 of ISO/IEC 9899:1999 and
Clause 7 of ISO/IEC 9899:1999/Cor.1:2001and Clause 7 of ISO/IEC
9899:1999/Cor.2:2003 is hereinafter called the C standard
library.1
3 The library described in ISO/IEC TR 19769:2004 is hereinafter
called the C Unicode TR.4 The operating system interface described
in ISO/IEC 9945:2003 is hereinafter called POSIX .5 The ECMAScript
Language Specification described in Standard Ecma-262 is
hereinafter called ECMA-262 .
1) With the qualifications noted in Clauses 18 through 30 and in
C.4, the C standard library is a subset of the C++
standardlibrary.
1.2 1
-
c ISO/IEC N3690
1.3 Terms and definitions [intro.defs]1 For the purposes of this
document, the following definitions apply.2 17.3 defines additional
terms that are used only in Clauses 17 through 30 and Annex D.3
Terms that are used only in a small portion of this International
Standard are defined where they are used
and italicized where they are defined.
1.3.1 [defns.argument]argumentactual argumentactual parameter
expression in the comma-separated list bounded by the
parentheses
1.3.2 [defns.argument.macro]argumentactual argumentactual
parameter sequence of preprocessing tokens in the comma-separated
list bounded by the paren-theses
1.3.3 [defns.argument.throw]argumentactual argumentactual
parameter the operand of throw
1.3.4 [defns.argument.templ]argumentactual argumentactual
parameter expression, type-id or template-name in the
comma-separated list bounded by theangle brackets
1.3.5 [defns.cond.supp]conditionally-supportedprogram construct
that an implementation is not required to support[Note: Each
implementation documents all conditionally-supported constructs
that it does not support.end note ]
1.3.6 [defns.diagnostic]diagnostic messagemessage belonging to
an implementation-defined subset of the implementations output
messages
1.3.7 [defns.dynamic.type]dynamic type type of the most derived
object (1.8) to which the glvalue denoted by a glvalue expression
refers[Example: if a pointer (8.3.1) p whose static type is pointer
to class B is pointing to an object of classD, derived from B
(Clause 10), the dynamic type of the expression *p is D. References
(8.3.2) are treatedsimilarly. end example ]
1.3.8 [defns.dynamic.type.prvalue]
1.3 2
-
c ISO/IEC N3690
dynamic type static type of the prvalue expression
1.3.9 [defns.ill.formed]ill-formed programprogram that is not
well formed
1.3.10 [defns.impl.defined]implementation-defined
behaviorbehavior, for a well-formed program construct and correct
data, that depends on the implementation andthat each
implementation documents
1.3.11 [defns.impl.limits]implementation limitsrestrictions
imposed upon programs by the implementation
1.3.12 [defns.locale.specific]locale-specific behaviorbehavior
that depends on local conventions of nationality, culture, and
language that each implementationdocuments
1.3.13 [defns.multibyte]multibyte charactersequence of one or
more bytes representing a member of the extended character set of
either the source orthe execution environment[Note: The extended
character set is a superset of the basic character set (2.3).end
note ]
1.3.14 [defns.parameter]parameterformal argumentformal parameter
object or reference declared as part of a function declaration or
definition or inthe catch clause of an exception handler that
acquires a value on entry to the function or handler
1.3.15 [defns.parameter.macro]parameterformal argumentformal
parameter identifier from the comma-separated list bounded by the
parentheses immediatelyfollowing the macro name
1.3.16 [defns.parameter.templ]parameterformal argumentformal
parameter template-parameter
1.3.17 [defns.signature]signature
1.3 3
-
c ISO/IEC N3690
name, parameter type list (8.3.5), and enclosing namespace (if
any)[Note: Signatures are used as a basis for name mangling and
linking.end note ]
1.3.18 [defns.signature.templ]signature name, parameter type
list (8.3.5), enclosing namespace (if any), return type,
andtemplate parameter list
1.3.19 [defns.signature.spec]signature signature of the template
of which it is a specialization and its templatearguments (whether
explicitly specified or deduced)
1.3.20 [defns.signature.member]signature name, parameter type
list (8.3.5), class of which the function is a member,
cv-qualifiers (if any), and ref-qualifier (if any)
1.3.21 [defns.signature.member.templ]signature name, parameter
type list (8.3.5), class of which the function is a
member,cv-qualifiers (if any), ref-qualifier (if any), return type,
and template parameter list
1.3.22 [defns.signature.member.spec]signature signature of the
member function template of which it isa specialization and its
template arguments (whether explicitly specified or deduced)
1.3.23 [defns.static.type]static typetype of an expression (3.9)
resulting from analysis of the program without considering
execution semantics[Note: The static type of an expression depends
only on the form of the program in which the expressionappears, and
does not change while the program is executing. end note ]
1.3.24 [defns.undefined]undefined behaviorbehavior for which
this International Standard imposes no requirements[Note: Undefined
behavior may be expected when this International Standard omits any
explicit definition ofbehavior or when a program uses an erroneous
construct or erroneous data. Permissible undefined behaviorranges
from ignoring the situation completely with unpredictable results,
to behaving during translation orprogram execution in a documented
manner characteristic of the environment (with or without the
issuance ofa diagnostic message), to terminating a translation or
execution (with the issuance of a diagnostic message).Many
erroneous program constructs do not engender undefined behavior;
they are required to be diagnosed.end note ]
1.3.25 [defns.unspecified]unspecified behaviorbehavior, for a
well-formed program construct and correct data, that depends on the
implementation
1.3 4
-
c ISO/IEC N3690
[Note: The implementation is not required to document which
behavior occurs. The range of possiblebehaviors is usually
delineated by this International Standard. end note ]
1.3.26 [defns.well.formed]well-formed programC++ program
constructed according to the syntax rules, diagnosable semantic
rules, and the One DefinitionRule (3.2).1.4 Implementation
compliance [intro.compliance]
1 The set of diagnosable rules consists of all syntactic and
semantic rules in this International Standard exceptfor those rules
containing an explicit notation that no diagnostic is required or
which are described asresulting in undefined behavior.
2 Although this International Standard states only requirements
on C++ implementations, those requirementsare often easier to
understand if they are phrased as requirements on programs, parts
of programs, orexecution of programs. Such requirements have the
following meaning: If a program contains no violations of the rules
in this International Standard, a conforming imple-
mentation shall, within its resource limits, accept and
correctly execute2 that program.
If a program contains a violation of any diagnosable rule or an
occurrence of a construct described inthis Standard as
conditionally-supported when the implementation does not support
that construct,a conforming implementation shall issue at least one
diagnostic message.
If a program contains a violation of a rule for which no
diagnostic is required, this InternationalStandard places no
requirement on implementations with respect to that program.
3 For classes and class templates, the library Clauses specify
partial definitions. Private members (Clause 11)are not specified,
but each implementation shall supply them to complete the
definitions according to thedescription in the library Clauses.
4 For functions, function templates, objects, and values, the
library Clauses specify declarations. Implemen-tations shall supply
definitions consistent with the descriptions in the library
Clauses.
5 The names defined in the library have namespace scope (7.3). A
C++ translation unit (2.2) obtains accessto these names by
including the appropriate standard library header (16.2).
6 The templates, classes, functions, and objects in the library
have external linkage (3.5). The implementationprovides definitions
for standard library entities, as necessary, while combining
translation units to form acomplete C++ program (2.2).
7 Two kinds of implementations are defined: a hosted
implementation and a freestanding implementation. Fora hosted
implementation, this International Standard defines the set of
available libraries. A freestandingimplementation is one in which
execution may take place without the benefit of an operating
system, andhas an implementation-defined set of libraries that
includes certain language-support libraries (17.6.1.3).
8 A conforming implementation may have extensions (including
additional library functions), provided they donot alter the
behavior of any well-formed program. Implementations are required
to diagnose programs thatuse such extensions that are ill-formed
according to this International Standard. Having done so,
however,they can compile and execute such programs.
9 Each implementation shall include documentation that
identifies all conditionally-supported constructs thatit does not
support and defines all locale-specific characteristics.3
1.5 Structure of this International Standard [intro.structure]1
Clauses 2 through 16 describe the C++ programming language. That
description includes detailed syntactic
specifications in a form described in 1.6. For convenience,
Annex A repeats all such syntactic specifications.
2) Correct execution can include undefined behavior, depending
on the data being processed; see 1.3 and 1.9.3) This documentation
also defines implementation-defined behavior; see 1.9.
1.5 5
-
c ISO/IEC N3690
2 Clauses 18 through 30 and Annex D (the library clauses)
describe the Standard C++ library. That descriptionincludes
detailed descriptions of the templates, classes, functions,
constants, and macros that constitute thelibrary, in a form
described in Clause 17.
3 Annex B recommends lower bounds on the capacity of conforming
implementations.4 Annex C summarizes the evolution of C++ since its
first published description, and explains in detail the
differences between C++ and C. Certain features of C++ exist
solely for compatibility purposes; Annex Ddescribes those
features.
5 Throughout this International Standard, each example is
introduced by [Example: and terminated byend example ]. Each note
is introduced by [Note: and terminated by end note ]. Examples
andnotes may be nested.1.6 Syntax notation [syntax]
1 In the syntax notation used in this International Standard,
syntactic categories are indicated by italic type,and literal words
and characters in constant width type. Alternatives are listed on
separate lines except ina few cases where a long set of
alternatives is marked by the phrase one of. If the text of an
alternative istoo long to fit on a line, the text is continued on
subsequent lines indented from the first one. An optionalterminal
or non-terminal symbol is indicated by the subscript opt, so
{ expressionopt}indicates an optional expression enclosed in
braces.
2 Names for syntactic categories have generally been chosen
according to the following rules: X-name is a use of an identifier
in a context that determines its meaning (e.g., class-name,
typedef-
name).
X-id is an identifier with no context-dependent meaning (e.g.,
qualified-id).
X-seq is one or more X s without intervening delimiters (e.g.,
declaration-seq is a sequence of declara-tions).
X-list is one or more X s separated by intervening commas (e.g.,
expression-list is a sequence ofexpressions separated by
commas).
1.7 The C++ memory model [intro.memory]1 The fundamental storage
unit in the C++ memory model is the byte. A byte is at least large
enough to contain
any member of the basic execution character set (2.3) and the
eight-bit code units of the Unicode UTF-8encoding form and is
composed of a contiguous sequence of bits, the number of which is
implementation-defined. The least significant bit is called the
low-order bit; the most significant bit is called the
high-orderbit. The memory available to a C++ program consists of
one or more sequences of contiguous bytes. Everybyte has a unique
address.
2 [Note: The representation of types is described in 3.9. end
note ]3 A memory location is either an object of scalar type or a
maximal sequence of adjacent bit-fields all having
non-zero width. [Note: Various features of the language, such as
references and virtual functions, mightinvolve additional memory
locations that are not accessible to programs but are managed by
the imple-mentation. end note ] Two or more threads of execution
(1.10) can update and access separate memorylocations without
interfering with each other.
4 [Note: Thus a bit-field and an adjacent non-bit-field are in
separate memory locations, and therefore can beconcurrently updated
by two threads of execution without interference. The same applies
to two bit-fields,if one is declared inside a nested struct
declaration and the other is not, or if the two are separated bya
zero-length bit-field declaration, or if they are separated by a
non-bit-field declaration. It is not safe toconcurrently update two
bit-fields in the same struct if all fields between them are also
bit-fields of non-zerowidth. end note ]
5 [Example: A structure declared as
1.7 6
-
c ISO/IEC N3690
struct {char a;int b:5,c:11,:0,d:8;struct {int ee:8;} e;
}
contains four separate memory locations: The field a and
bit-fields d and e.ee are each separate memorylocations, and can be
modified concurrently without interfering with each other. The
bit-fields b and ctogether constitute the fourth memory location.
The bit-fields b and c cannot be concurrently modified, butb and a,
for example, can be. end example ]1.8 The C++ object model
[intro.object]
1 The constructs in a C++ program create, destroy, refer to,
access, and manipulate objects. An object is aregion of storage.
[Note: A function is not an object, regardless of whether or not it
occupies storage in theway that objects do. end note ] An object is
created by a definition (3.1), by a new-expression (5.3.4)or by the
implementation (12.2) when needed. The properties of an object are
determined when the objectis created. An object can have a name
(Clause 3). An object has a storage duration (3.7) which
influencesits lifetime (3.8). An object has a type (3.9). The term
object type refers to the type with which the objectis created.
Some objects are polymorphic (10.3); the implementation generates
information associated witheach such object that makes it possible
to determine that objects type during program execution. For
otherobjects, the interpretation of the values found therein is
determined by the type of the expressions (Clause 5)used to access
them.
2 Objects can contain other objects, called subobjects. A
subobject can be a member subobject (9.2), a baseclass subobject
(Clause 10), or an array element. An object that is not a subobject
of any other object iscalled a complete object.
3 For every object x, there is some object called the complete
object of x, determined as follows: If x is a complete object, then
x is the complete object of x.
Otherwise, the complete object of x is the complete object of
the (unique) object that contains x.
4 If a complete object, a data member (9.2), or an array element
is of class type, its type is considered themost derived class, to
distinguish it from the class type of any base class subobject; an
object of a mostderived class type or of a non-class type is called
a most derived object.
5 Unless it is a bit-field (9.6), a most derived object shall
have a non-zero size and shall occupy one or morebytes of storage.
Base class subobjects may have zero size. An object of trivially
copyable or standard-layouttype (3.9) shall occupy contiguous bytes
of storage.
6 Unless an object is a bit-field or a base class subobject of
zero size, the address of that object is the address ofthe first
byte it occupies. Two objects that are not bit-fields may have the
same address if one is a subobjectof the other, or if at least one
is a base class subobject of zero size and they are of different
types; otherwise,they shall have distinct addresses.4
[Example:static const char test1 = x;static const char test2 =
x;const bool b = &test1 != &test2; // always true
end example ]7 [Note: C++ provides a variety of fundamental
types and several ways of composing new types from existing
types (3.9). end note ]
4) Under the as-if rule an implementation is allowed to store
two objects at the same machine address or not store anobject at
all if the program cannot observe the difference (1.9).
1.8 7
-
c ISO/IEC N3690
1.9 Program execution [intro.execution]1 The semantic
descriptions in this International Standard define a parameterized
nondeterministic abstract
machine. This International Standard places no requirement on
the structure of conforming implementations.In particular, they
need not copy or emulate the structure of the abstract machine.
Rather, conformingimplementations are required to emulate (only)
the observable behavior of the abstract machine as
explainedbelow.5
2 Certain aspects and operations of the abstract machine are
described in this International Standard asimplementation-defined
(for example, sizeof(int)). These constitute the parameters of the
abstract ma-chine. Each implementation shall include documentation
describing its characteristics and behavior in theserespects.6 Such
documentation shall define the instance of the abstract machine
that corresponds to thatimplementation (referred to as the
corresponding instance below).
3 Certain other aspects and operations of the abstract machine
are described in this International Standard asunspecified (for
example, order of evaluation of arguments to a function). Where
possible, this InternationalStandard defines a set of allowable
behaviors. These define the nondeterministic aspects of the
abstractmachine. An instance of the abstract machine can thus have
more than one possible execution for a givenprogram and a given
input.
4 Certain other operations are described in this International
Standard as undefined (for example, the effectof attempting to
modify a const object). [Note: This International Standard imposes
no requirements onthe behavior of programs that contain undefined
behavior. end note ]
5 A conforming implementation executing a well-formed program
shall produce the same observable behavioras one of the possible
executions of the corresponding instance of the abstract machine
with the same programand the same input. However, if any such
execution contains an undefined operation, this
InternationalStandard places no requirement on the implementation
executing that program with that input (not evenwith regard to
operations preceding the first undefined operation).
6 When the processing of the abstract machine is interrupted by
receipt of a signal, the values of objects whichare neither of type
volatile std::sig_atomic_t nor
lock-free atomic objects (29.4)
are unspecified during the execution of the signal handler, and
the value of any object not in either ofthese two categories that
is modified by the handler becomes undefined.
7 An instance of each object with automatic storage duration
(3.7.3) is associated with each entry into itsblock. Such an object
exists and retains its last-stored value during the execution of
the block and while theblock is suspended (by a call of a function
or receipt of a signal).
8 The least requirements on a conforming implementation are:
Access to volatile objects are evaluated strictly according to
the rules of the abstract machine.
At program termination, all data written into files shall be
identical to one of the possible results thatexecution of the
program according to the abstract semantics would have
produced.
The input and output dynamics of interactive devices shall take
place in such a fashion that promptingoutput is actually delivered
before a program waits for input. What constitutes an interactive
deviceis implementation-defined.
5) This provision is sometimes called the as-if rule, because an
implementation is free to disregard any requirement of
thisInternational Standard as long as the result is as if the
requirement had been obeyed, as far as can be determined from
theobservable behavior of the program. For instance, an actual
implementation need not evaluate part of an expression if it
candeduce that its value is not used and that no side effects
affecting the observable behavior of the program are produced.
6) This documentation also includes conditionally-supported
constructs and locale-specific behavior. See 1.4.
1.9 8
-
c ISO/IEC N3690
These collectively are referred to as the observable behavior of
the program. [Note: More stringentcorrespondences between abstract
and actual semantics may be defined by each implementation. endnote
]
9 [Note: Operators can be regrouped according to the usual
mathematical rules only where the operatorsreally are associative
or commutative.7 For example, in the following fragmentint a, b;/
... /a = a + 32760 + b + 5;
the expression statement behaves exactly the same asa = (((a +
32760) + b) + 5);
due to the associativity and precedence of these operators.
Thus, the result of the sum (a + 32760) is nextadded to b, and that
result is then added to 5 which results in the value assigned to a.
On a machine in whichoverflows produce an exception and in which
the range of values representable by an int is [-32768,+32767],the
implementation cannot rewrite this expression as
a = ((a + b) + 32765);
since if the values for a and b were, respectively, -32754 and
-15, the sum a + b would produce an exceptionwhile the original
expression would not; nor can the expression be rewritten either
as
a = ((a + 32765) + b);
ora = (a + (b + 32765));
since the values for a and b might have been, respectively, 4
and -8 or -17 and 12. However on a machine inwhich overflows do not
produce an exception and in which the results of overflows are
reversible, the aboveexpression statement can be rewritten by the
implementation in any of the above ways because the sameresult will
occur. end note ]
10 A full-expression is an expression that is not a
subexpression of another expression. [Note: in some contexts,such
as unevaluated operands, a syntactic subexpression is considered a
full-expression (Clause 5). endnote ] If a language construct is
defined to produce an implicit call of a function, a use of the
languageconstruct is considered to be an expression for the
purposes of this definition. A call to a destructorgenerated at the
end of the lifetime of an object other than a temporary object is
an implicit full-expression.Conversions applied to the result of an
expression in order to satisfy the requirements of the
languageconstruct in which the expression appears are also
considered to be part of the full-expression.
[Example:struct S {S(int i): I(i) { }int& v() { return I;
}
private:int I;
};
S s1(1); // full-expression is call of S::S(int)S s2 = 2; //
full-expression is call of S::S(int)
void f() {if (S(3).v()) // full-expression includes
lvalue-to-rvalue and
// int to bool conversions, performed before
7) Overloaded operators are never assumed to be associative or
commutative.
1.9 9
-
c ISO/IEC N3690
// temporary is deleted at end of full-expression{ }
}
end example ]11 [Note: The evaluation of a full-expression can
include the evaluation of subexpressions that are not lexically
part of the full-expression. For example, subexpressions
involved in evaluating default arguments (8.3.6) areconsidered to
be created in the expression that calls the function, not the
expression that defines the defaultargument. end note ]
12 Accessing an object designated by a volatile glvalue (3.10),
modifying an object, calling a library I/Ofunction, or calling a
function that does any of those operations are all side effects,
which are changes in thestate of the execution environment.
Evaluation of an expression (or a sub-expression) in general
includesboth value computations (including determining the identity
of an object for glvalue evaluation and fetchinga value previously
assigned to an object for prvalue evaluation) and initiation of
side effects. When a callto a library I/O function returns or an
access to a volatile object is evaluated the side effect is
consideredcomplete, even though some external actions implied by
the call (such as the I/O itself) or by the volatileaccess may not
have completed yet.
13 Sequenced before is an asymmetric, transitive, pair-wise
relation between evaluations executed by a singlethread (1.10),
which induces a partial order among those evaluations. Given any
two evaluations A and B, ifA is sequenced before B, then the
execution of A shall precede the execution of B. If A is not
sequenced beforeB and B is not sequenced before A, then A and B are
unsequenced. [Note: The execution of unsequencedevaluations can
overlap. end note ] Evaluations A and B are indeterminately
sequenced when either Ais sequenced before B or B is sequenced
before A, but it is unspecified which. [Note:
Indeterminatelysequenced evaluations cannot overlap, but either
could be executed first. end note ]
14 Every value computation and side effect associated with a
full-expression is sequenced before every valuecomputation and side
effect associated with the next full-expression to be
evaluated.8.
15 Except where noted, evaluations of operands of individual
operators and of subexpressions of individualexpressions are
unsequenced. [Note: In an expression that is evaluated more than
once during the executionof a program, unsequenced and
indeterminately sequenced evaluations of its subexpressions need
not beperformed consistently in different evaluations. end note ]
The value computations of the operands of anoperator are sequenced
before the value computation of the result of the operator. If a
side effect on a scalarobject is unsequenced relative to either
another side effect on the same scalar object or a value
computationusing the value of the same scalar object, the behavior
is undefined.
[Example:void f(int, int);void g(int i, int* v) {i = v[i++]; //
the behavior is undefinedi = 7, i++, i++; // i becomes 9
i = i++ + 1; // the behavior is undefinedi = i + 1; // the value
of i is incremented
f(i = -1, i = -1); // the behavior is undefined}
end example ]When calling a function (whether or not the
function is inline), every value computation and side effect
associated with any argument expression, or with the postfix
expression designating the called function, issequenced before
execution of every expression or statement in the body of the
called function. [Note: Valuecomputations and side effects
associated with different argument expressions are unsequenced. end
note ]
8) As specified in 12.2, after a full-expression is evaluated, a
sequence of zero or more invocations of destructor functions
fortemporary objects takes place, usually in reverse order of the
construction of each temporary object.
1.9 10
-
c ISO/IEC N3690
Every evaluation in the calling function (including other
function calls) that is not otherwise specificallysequenced before
or after the execution of the body of the called function is
indeterminately sequenced withrespect to the execution of the
called function.9 Several contexts in C++ cause evaluation of a
function call,even though no corresponding function call syntax
appears in the translation unit. [Example: Evaluation ofa new
expression invokes one or more allocation and constructor
functions; see 5.3.4. For another example,invocation of a
conversion function (12.3.2) can arise in contexts in which no
function call syntax appears.end example ] The sequencing
constraints on the execution of the called function (as described
above)are features of the function calls as evaluated, whatever the
syntax of the expression that calls the functionmight be.
1.10 Multi-threaded executions and data races
[intro.multithread]1 A thread of execution (also known as a thread)
is a single flow of control within a program, including the
initial
invocation of a specific top-level function, and recursively
including every function invocation subsequentlyexecuted by the
thread. [Note: When one thread creates another, the initial call to
the top-level function ofthe new thread is executed by the new
thread, not by the creating thread. end note ] Every thread in
aprogram can potentially access every object and function in a
program.10 Under a hosted implementation, aC++ program can have
more than one thread running concurrently. The execution of each
thread proceedsas defined by the remainder of this standard. The
execution of the entire program consists of an execution ofall of
its threads. [Note: Usually the execution can be viewed as an
interleaving of all its threads. However,some kinds of atomic
operations, for example, allow executions inconsistent with a
simple interleaving, asdescribed below. end note ] Under a
freestanding implementation, it is implementation-defined whethera
program can have more than one thread of execution.
2 Implementations should ensure that all unblocked threads
eventually make progress. [Note: Standardlibrary functions may
silently block on I/O or locks. Factors in the execution
environment, includingexternally-imposed thread priorities, may
prevent an implementation from making certain guarantees offorward
progress. end note ]
3 The value of an object visible to a thread T at a particular
point is the initial value of the object, a valueassigned to the
object by T , or a value assigned to the object by another thread,
according to the rulesbelow. [Note: In some cases, there may
instead be undefined behavior. Much of this section is motivatedby
the desire to support atomic operations with explicit and detailed
visibility constraints. However, it alsoimplicitly supports a
simpler view for more restricted programs. end note ]
4 Two expression evaluations conflict if one of them modifies a
memory location (1.7) and the other oneaccesses or modifies the
same memory location.
5 The library defines a number of atomic operations (Clause 29)
and operations on mutexes (Clause 30)that are specially identified
as synchronization operations. These operations play a special role
in makingassignments in one thread visible to another. A
synchronization operation on one or more memory locationsis either
a consume operation, an acquire operation, a release operation, or
both an acquire and releaseoperation. A synchronization operation
without an associated memory location is a fence and can be
eitheran acquire fence, a release fence, or both an acquire and
release fence. In addition, there are relaxed atomicoperations,
which are not synchronization operations, and atomic
read-modify-write operations, which havespecial characteristics.
[Note: For example, a call that acquires a mutex will perform an
acquire operationon the locations comprising the mutex.
Correspondingly, a call that releases the same mutex will perform
arelease operation on those same locations. Informally, performing
a release operation on A forces prior sideeffects on other memory
locations to become visible to other threads that later perform a
consume or anacquire operation on A. Relaxed atomic operations are
not synchronization operations even though, likesynchronization
operations, they cannot contribute to data races. end note ]
9) In other words, function executions do not interleave with
each other.10) An object with automatic or thread storage duration
(3.7) is associated with one specific thread, and can be accessed
bya different thread only indirectly through a pointer or reference
(3.9.2).
1.10 11
-
c ISO/IEC N3690
6 All modifications to a particular atomic objectM occur in some
particular total order, called the modificationorder of M . If A
and B are modifications of an atomic object M and A happens before
(as defined below) B,then A shall precede B in the modification
order of M , which is defined below. [Note: This states that
themodification orders must respect the happens before
relationship. end note ] [Note: There is a separateorder for each
atomic object. There is no requirement that these can be combined
into a single total order forall objects. In general this will be
impossible since different threads may observe modifications to
differentobjects in inconsistent orders. end note ]
7 A release sequence headed by a release operation A on an
atomic object M is a maximal contiguous sub-sequence of side
effects in the modification order of M , where the first operation
is A, and every subsequentoperation is performed by the same thread
that performed A, or
is an atomic read-modify-write operation.
8 Certain library calls synchronize with other library calls
performed by another thread. For example, anatomic store-release
synchronizes with a load-acquire that takes its value from the
store (29.3). [Note:Except in the specified cases, reading a later
value does not necessarily ensure visibility as described
below.Such a requirement would sometimes