ISO IEC 14882 2011

INTERNATIONAL STANDARD ISO/IEC 14882 Third edition 2011-09-01 Information technology — Programming languages — C++ Tec...

6 downloads 571 Views 14MB Size
INTERNATIONAL STANDARD

ISO/IEC 14882 Third edition 2011-09-01

Information technology — Programming languages — C++ Technologies de l'information — Langages de programmation — C++

Reference number ISO/IEC 14882:2011(E)

© ISO/IEC 2011

ISO/IEC 14882:2011(E)

COPYRIGHT PROTECTED DOCUMENT © ISO/IEC 2011 All rights reserved. Unless otherwise specified, no part of this publication may be reproduced or utilized in any form or by any means, electronic or mechanical, including photocopying and microfilm, without permission in writing from either ISO at the address below or ISO's member body in the country of the requester. ISO copyright office Case postale 56  CH-1211 Geneva 20 Tel. + 41 22 749 01 11 Fax + 41 22 749 09 47 E-mail [email protected] Web www.iso.org Published in Switzerland

ii

© ISO/IEC 2011 – All rights reserved

ISO/IEC 14882:2011(E)

Contents Contents

iii

List of Tables

xi

List of Figures

xv

1 General 1.1 Scope . . . . . . . . . . . . . . . . . . . . 1.2 Normative references . . . . . . . . . . . . 1.3 Terms and definitions . . . . . . . . . . . . 1.4 Implementation compliance . . . . . . . . 1.5 Structure of this International Standard . 1.6 Syntax notation . . . . . . . . . . . . . . . 1.7 The C++ memory model . . . . . . . . . . 1.8 The C++ object model . . . . . . . . . . . 1.9 Program execution . . . . . . . . . . . . . 1.10 Multi-threaded executions and data races 1.11 Acknowledgments . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

1 1 1 2 5 6 6 7 7 8 12 16

2 Lexical conventions 2.1 Separate translation . . . . 2.2 Phases of translation . . . . 2.3 Character sets . . . . . . . . 2.4 Trigraph sequences . . . . . 2.5 Preprocessing tokens . . . . 2.6 Alternative tokens . . . . . 2.7 Tokens . . . . . . . . . . . . 2.8 Comments . . . . . . . . . . 2.9 Header names . . . . . . . . 2.10 Preprocessing numbers . . . 2.11 Identifiers . . . . . . . . . . 2.12 Keywords . . . . . . . . . . 2.13 Operators and punctuators 2.14 Literals . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

17 17 17 18 19 20 21 21 21 22 22 22 23 24 24

3 Basic 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

34 34 36 38 45 59 62 65 69 72 78

concepts Declarations and definitions One definition rule . . . . . Scope . . . . . . . . . . . . Name lookup . . . . . . . . Program and linkage . . . . Start and termination . . . Storage duration . . . . . . Object lifetime . . . . . . . Types . . . . . . . . . . . . Lvalues and rvalues . . . . .

Contents

© ISO/IEC 2011 – All rights reserved

iii

ISO/IEC 14882:2011(E)

3.11

Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Standard conversions 4.1 Lvalue-to-rvalue conversion . . 4.2 Array-to-pointer conversion . . 4.3 Function-to-pointer conversion . 4.4 Qualification conversions . . . . 4.5 Integral promotions . . . . . . . 4.6 Floating point promotion . . . 4.7 Integral conversions . . . . . . . 4.8 Floating point conversions . . . 4.9 Floating-integral conversions . . 4.10 Pointer conversions . . . . . . . 4.11 Pointer to member conversions 4.12 Boolean conversions . . . . . . 4.13 Integer conversion rank . . . . .

80

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

81 82 82 82 82 83 84 84 84 85 85 85 86 86

5 Expressions 5.1 Primary expressions . . . . . . . . . . . . . . . . 5.2 Postfix expressions . . . . . . . . . . . . . . . . . 5.3 Unary expressions . . . . . . . . . . . . . . . . . . 5.4 Explicit type conversion (cast notation) . . . . . 5.5 Pointer-to-member operators . . . . . . . . . . . 5.6 Multiplicative operators . . . . . . . . . . . . . . 5.7 Additive operators . . . . . . . . . . . . . . . . . 5.8 Shift operators . . . . . . . . . . . . . . . . . . . 5.9 Relational operators . . . . . . . . . . . . . . . . 5.10 Equality operators . . . . . . . . . . . . . . . . . 5.11 Bitwise AND operator . . . . . . . . . . . . . . . 5.12 Bitwise exclusive OR operator . . . . . . . . . . . 5.13 Bitwise inclusive OR operator . . . . . . . . . . . 5.14 Logical AND operator . . . . . . . . . . . . . . . 5.15 Logical OR operator . . . . . . . . . . . . . . . . 5.16 Conditional operator . . . . . . . . . . . . . . . . 5.17 Assignment and compound assignment operators 5.18 Comma operator . . . . . . . . . . . . . . . . . . 5.19 Constant expressions . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

87 89 97 109 117 118 119 119 121 121 122 123 123 123 123 124 124 125 127 127

6 Statements 6.1 Labeled statement . . . . . . 6.2 Expression statement . . . . . 6.3 Compound statement or block 6.4 Selection statements . . . . . 6.5 Iteration statements . . . . . 6.6 Jump statements . . . . . . . 6.7 Declaration statement . . . . 6.8 Ambiguity resolution . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

130 130 130 130 131 133 136 137 138

. . . . . . . .

. . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

7 Declarations 140 7.1 Specifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 7.2 Enumeration declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Contents

iv

© ISO/IEC 2011 – All rights reserved

ISO/IEC 14882:2011(E)

7.3 7.4 7.5 7.6

Namespaces . . . . . . The asm declaration . Linkage specifications Attributes . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

161 173 174 177

8 Declarators 8.1 Type names . . . . . . 8.2 Ambiguity resolution . 8.3 Meaning of declarators 8.4 Function definitions . . 8.5 Initializers . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

182 183 184 186 198 202

9 Classes 9.1 Class names . . . . . . . 9.2 Class members . . . . . 9.3 Member functions . . . . 9.4 Static members . . . . . 9.5 Unions . . . . . . . . . . 9.6 Bit-fields . . . . . . . . . 9.7 Nested class declarations 9.8 Local class declarations 9.9 Nested type names . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

216 218 220 222 225 227 229 229 231 231

10 Derived classes 10.1 Multiple base classes . 10.2 Member name lookup 10.3 Virtual functions . . . 10.4 Abstract classes . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

233 234 236 240 244

. . . . . . . . . . . . base class members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

246 248 249 251 254 255 256 256

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

257 257 260 262 265 267 269 275 278 286

. . . .

11 Member access control 11.1 Access specifiers . . . . . . . . . 11.2 Accessibility of base classes and 11.3 Friends . . . . . . . . . . . . . . 11.4 Protected member access . . . . 11.5 Access to virtual functions . . . 11.6 Multiple access . . . . . . . . . 11.7 Nested classes . . . . . . . . . .

12 Special member functions 12.1 Constructors . . . . . . . . . . . 12.2 Temporary objects . . . . . . . . 12.3 Conversions . . . . . . . . . . . . 12.4 Destructors . . . . . . . . . . . . 12.5 Free store . . . . . . . . . . . . . 12.6 Initialization . . . . . . . . . . . . 12.7 Construction and destruction . . 12.8 Copying and moving class objects 12.9 Inheriting constructors . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

13 Overloading 289 13.1 Overloadable declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Contents

© ISO/IEC 2011 – All rights reserved

v

ISO/IEC 14882:2011(E)

13.2 13.3 13.4 13.5 13.6

Declaration matching . . . . . . Overload resolution . . . . . . . Address of overloaded function Overloaded operators . . . . . . Built-in operators . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

291 292 311 313 317

14 Templates 14.1 Template parameters . . . . . . . . . . . . 14.2 Names of template specializations . . . . . 14.3 Template arguments . . . . . . . . . . . . 14.4 Type equivalence . . . . . . . . . . . . . . 14.5 Template declarations . . . . . . . . . . . 14.6 Name resolution . . . . . . . . . . . . . . . 14.7 Template instantiation and specialization 14.8 Function template specializations . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

321 322 325 327 333 334 352 366 378

15 Exception handling 15.1 Throwing an exception . . . . 15.2 Constructors and destructors 15.3 Handling an exception . . . . 15.4 Exception specifications . . . 15.5 Special functions . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

400 401 403 403 405 409

16 Preprocessing directives 16.1 Conditional inclusion . . 16.2 Source file inclusion . . . 16.3 Macro replacement . . . 16.4 Line control . . . . . . . 16.5 Error directive . . . . . 16.6 Pragma directive . . . . 16.7 Null directive . . . . . . 16.8 Predefined macro names 16.9 Pragma operator . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

411 413 414 415 420 421 421 421 421 423

17 Library introduction 17.1 General . . . . . . . . . . . . . . . . 17.2 The C standard library . . . . . . . . 17.3 Definitions . . . . . . . . . . . . . . . 17.4 Additional definitions . . . . . . . . . 17.5 Method of description (Informative) 17.6 Library-wide requirements . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

424 424 425 425 428 428 434

18 Language support library 18.1 General . . . . . . . . . . . . . 18.2 Types . . . . . . . . . . . . . . 18.3 Implementation properties . . . 18.4 Integer types . . . . . . . . . . 18.5 Start and termination . . . . . 18.6 Dynamic memory management 18.7 Type identification . . . . . . . 18.8 Exception handling . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

454 454 454 455 464 465 467 473 475

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . .

. . . . . . . .

. . . . .

. . . . . . . .

. . . . .

. . . . . . . .

. . . . .

. . . . .

Contents

vi

© ISO/IEC 2011 – All rights reserved

ISO/IEC 14882:2011(E)

18.9 Initializer lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 18.10 Other runtime support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 19 Diagnostics library 19.1 General . . . . . . . 19.2 Exception classes . . 19.3 Assertions . . . . . . 19.4 Error numbers . . . 19.5 System error support

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

484 484 484 488 489 489

20 General utilities library 20.1 General . . . . . . . . . . . . . . . . . . . . 20.2 Utility components . . . . . . . . . . . . . . 20.3 Pairs . . . . . . . . . . . . . . . . . . . . . . 20.4 Tuples . . . . . . . . . . . . . . . . . . . . . 20.5 Class template bitset . . . . . . . . . . . . 20.6 Memory . . . . . . . . . . . . . . . . . . . . 20.7 Smart pointers . . . . . . . . . . . . . . . . 20.8 Function objects . . . . . . . . . . . . . . . 20.9 Metaprogramming and type traits . . . . . 20.10 Compile-time rational arithmetic . . . . . . 20.11 Time utilities . . . . . . . . . . . . . . . . . 20.12 Class template scoped_allocator_adaptor 20.13 Class type_index . . . . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

500 500 500 504 508 518 525 540 566 585 602 605 620 625

21 Strings library 21.1 General . . . . . . . . . . . . . . 21.2 Character traits . . . . . . . . . . 21.3 String classes . . . . . . . . . . . 21.4 Class template basic_string . . 21.5 Numeric conversions . . . . . . . 21.6 Hash support . . . . . . . . . . . 21.7 Null-terminated sequence utilities

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

628 628 628 634 638 665 666 667

22 Localization library 22.1 General . . . . . . . . . . . . . 22.2 Header synopsis . . . 22.3 Locales . . . . . . . . . . . . . . 22.4 Standard locale categories . . 22.5 Standard code conversion facets 22.6 C library locales . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

671 671 671 672 684 725 726

23 Containers library 23.1 General . . . . . . . . . . . . . . 23.2 Container requirements . . . . . . 23.3 Sequence containers . . . . . . . 23.4 Associative containers . . . . . . 23.5 Unordered associative containers 23.6 Container adaptors . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

728 728 728 754 786 803 819

24 Iterators library

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

829

Contents

© ISO/IEC 2011 – All rights reserved

vii

ISO/IEC 14882:2011(E)

24.1 24.2 24.3 24.4 24.5 24.6

General . . . . . . . . . . . . Iterator requirements . . . . . Header synopsis . Iterator primitives . . . . . . Iterator adaptors . . . . . . . Stream iterators . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

829 829 834 837 841 855

25 Algorithms library 25.1 General . . . . . . . . . . . . . . . 25.2 Non-modifying sequence operations 25.3 Mutating sequence operations . . . 25.4 Sorting and related operations . . . 25.5 C library algorithms . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

863 863 873 878 887 900

26 Numerics library 26.1 General . . . . . . . . . . . . . 26.2 Numeric type requirements . . 26.3 The floating-point environment 26.4 Complex numbers . . . . . . . . 26.5 Random number generation . . 26.6 Numeric arrays . . . . . . . . . 26.7 Generalized numeric operations 26.8 C library . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

902 902 902 903 904 914 959 981 984

27 Input/output library 27.1 General . . . . . . . . . . . . 27.2 Iostreams requirements . . . . 27.3 Forward declarations . . . . . 27.4 Standard iostream objects . . 27.5 Iostreams base classes . . . . 27.6 Stream buffers . . . . . . . . . 27.7 Formatting and manipulators 27.8 String-based streams . . . . . 27.9 File-based streams . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

989 989 990 990 992 994 1013 1023 1049 1061

28 Regular expressions library 28.1 General . . . . . . . . . . . . . . . . . . . . . . . . 28.2 Definitions . . . . . . . . . . . . . . . . . . . . . . . 28.3 Requirements . . . . . . . . . . . . . . . . . . . . . 28.4 Header synopsis . . . . . . . . . . . . . . . 28.5 Namespace std::regex_constants . . . . . . . . . 28.6 Class regex_error . . . . . . . . . . . . . . . . . . 28.7 Class template regex_traits . . . . . . . . . . . . 28.8 Class template basic_regex . . . . . . . . . . . . . 28.9 Class template sub_match . . . . . . . . . . . . . . 28.10 Class template match_results . . . . . . . . . . . 28.11 Regular expression algorithms . . . . . . . . . . . . 28.12 Regular expression iterators . . . . . . . . . . . . . 28.13 Modified ECMAScript regular expression grammar

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

1076 1076 1076 1077 1079 1086 1089 1089 1092 1097 1103 1108 1113 1119

29 Atomic operations library

. . . . . .

. . . . . . . . .

. . . . . .

1122

Contents

viii

© ISO/IEC 2011 – All rights reserved

ISO/IEC 14882:2011(E)

29.1 29.2 29.3 29.4 29.5 29.6 29.7 29.8

General . . . . . . . . . . . Header synopsis . Order and consistency . . . Lock-free property . . . . . Atomic types . . . . . . . . Operations on atomic types Flag type and operations . . Fences . . . . . . . . . . . .

30 Thread support library 30.1 General . . . . . . . 30.2 Requirements . . . . 30.3 Threads . . . . . . . 30.4 Mutual exclusion . . 30.5 Condition variables . 30.6 Futures . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

1122 1122 1125 1128 1128 1132 1137 1138

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

1140 1140 1140 1143 1149 1162 1170

A Grammar summary A.1 Keywords . . . . . . . . . A.2 Lexical conventions . . . . A.3 Basic concepts . . . . . . . A.4 Expressions . . . . . . . . A.5 Statements . . . . . . . . A.6 Declarations . . . . . . . . A.7 Declarators . . . . . . . . A.8 Classes . . . . . . . . . . . A.9 Derived classes . . . . . . A.10 Special member functions A.11 Overloading . . . . . . . . A.12 Templates . . . . . . . . . A.13 Exception handling . . . . A.14 Preprocessing directives .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

1187 1187 1187 1192 1192 1195 1196 1200 1202 1203 1203 1204 1204 1205 1205

. . . . . .

. . . . . .

B Implementation quantities

1207

C Compatibility 1209 C.1 C++ and ISO C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209 C.2 C++ and ISO C++ 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218 C.3 C standard library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1225 D Compatibility features D.1 Increment operator with bool operand D.2 register keyword . . . . . . . . . . . D.3 Implicit declaration of copy functions . D.4 Dynamic exception specifications . . . D.5 C standard library headers . . . . . . . D.6 Old iostreams members . . . . . . . . D.7 char* streams . . . . . . . . . . . . . . D.8 Function objects . . . . . . . . . . . . D.9 Binders . . . . . . . . . . . . . . . . . D.10 auto_ptr . . . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

1229 1229 1229 1229 1229 1229 1230 1231 1240 1243 1245

Contents

© ISO/IEC 2011 – All rights reserved

ix

ISO/IEC 14882:2011(E)

D.11 Violating exception-specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247 E Universal character names for identifier characters 1249 E.1 Ranges of characters allowed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1249 E.2 Ranges of characters disallowed initially . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1249 F Cross references

1250

Index

1268

Index of grammar productions

1297

Index of library names

1300

Index of implementation-defined behavior

1336

Contents

x

© ISO/IEC 2011 – All rights reserved

ISO/IEC 14882:2011(E)

List of Tables 1 2 3 4 5 6 7 8

Trigraph sequences . . . . . . . Alternative tokens . . . . . . . Identifiers with special meaning Keywords . . . . . . . . . . . . Alternative representations . . Types of integer constants . . . Escape sequences . . . . . . . . String literal concatenations . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

19 21 23 23 24 25 27 30

9

Relations on const and volatile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

78

10

simple-type-specifiers and the types they specify . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

11 12

Relationship between operator and function call notation . . . . . . . . . . . . . . . . . . . . . . 297 Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

Library categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C++ library headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . C++ headers for C library facilities . . . . . . . . . . . . . . . . . . . . C++ headers for freestanding implementations . . . . . . . . . . . . . EqualityComparable requirements . . . . . . . . . . . . . . . . . . . . LessThanComparable requirements . . . . . . . . . . . . . . . . . . . . DefaultConstructible requirements . . . . . . . . . . . . . . . . . . MoveConstructible requirements . . . . . . . . . . . . . . . . . . . . CopyConstructible requirements (in addition to MoveConstructible) MoveAssignable requirements . . . . . . . . . . . . . . . . . . . . . . CopyAssignable requirements(in addition to MoveAssignable) . . . . Destructible requirements . . . . . . . . . . . . . . . . . . . . . . . . NullablePointer requirements . . . . . . . . . . . . . . . . . . . . . . Hash requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Descriptive variable definitions . . . . . . . . . . . . . . . . . . . . . . Allocator requirements . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

424 435 435 436 437 437 437 438 438 438 438 438 440 441 441 442

29 30 31 32 33 34 35 36 37 38 39 40

Language support library summary Header synopsis . . . . Header synopsis . . . . Header synopsis . . . . . Header synopsis . . . . Header synopsis . . . . Header synopsis . . . . Header synopsis . . . Header synopsis . . . . Header synopsis . . . Header synopsis . . . . Header synopsis . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

454 454 464 464 466 482 482 482 482 482 482 483

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

List of Tables

© ISO/IEC 2011 – All rights reserved

xi

ISO/IEC 14882:2011(E)

41 42 43

Diagnostics library summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489

44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

General utilities library summary . . . . . . . Header synopsis . . . . . . . . . . Header synopsis . . . . . . . . . . Primary type category predicates . . . . . . . Composite type category predicates . . . . . Type property predicates . . . . . . . . . . . Type property queries . . . . . . . . . . . . . Type relationship predicates . . . . . . . . . . Const-volatile modifications . . . . . . . . . . Reference modifications . . . . . . . . . . . . Sign modifications . . . . . . . . . . . . . . . Array modifications . . . . . . . . . . . . . . Pointer modifications . . . . . . . . . . . . . . Other transformations . . . . . . . . . . . . . Expressions used to perform ratio arithmetic Clock requirements . . . . . . . . . . . . . . . Header synopsis . . . . . . . . . . .

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

Strings library summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 Character traits requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 basic_string(const Allocator&) effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643 basic_string(const basic_string&) effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643 basic_string(const basic_string&, size_type, size_type, const Allocator&) effects . 643 basic_string(const charT*, size_type, const Allocator&) effects . . . . . . . . . . . . . . 644 basic_string(const charT*, const Allocator&) effects . . . . . . . . . . . . . . . . . . . . . 644 basic_string(size_t, charT, const Allocator&) effects . . . . . . . . . . . . . . . . . . . . 644 basic_string(const basic_string&, const Allocator&) and basic_string(basic_string&&, const Allocator&) effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645 operator=(const basic_string&) effects . . . . . . . . . . . . . 645 operator=(const basic_string&&) effects . . . . . . . . . . . . 645 compare() results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659 Potential mbstate_t data races . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670

80 81 82 83 84 85 86 87

Localization library summary Locale category facets . . . . Required specializations . . . do_in/do_out result values . do_unshift result values . . Integer conversions . . . . . . Length modifier . . . . . . . . Integer conversions . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

500 539 540 589 589 590 595 596 597 598 598 599 599 600 604 608 619

671 675 676 694 694 698 698 702

List of Tables

xii

© ISO/IEC 2011 – All rights reserved

ISO/IEC 14882:2011(E)

88 89 90 91 92 93 94

Floating-point conversions . . . Length modifier . . . . . . . . . Numeric conversions . . . . . . Fill padding . . . . . . . . . . . do_get_date effects . . . . . . Header synopsis . . Potential setlocale data races

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

703 703 703 704 711 726 727

95 96 97 98 99 100 101 102 103

Containers library summary . . . . . . . . . . . . . . . . . . . . . . . . . Container requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . Reversible container requirements . . . . . . . . . . . . . . . . . . . . . . Optional container operations . . . . . . . . . . . . . . . . . . . . . . . . Allocator-aware container requirements . . . . . . . . . . . . . . . . . . Sequence container requirements (in addition to container) . . . . . . . Optional sequence container operations . . . . . . . . . . . . . . . . . . Associative container requirements (in addition to container) . . . . . . Unordered associative container requirements (in addition to container)

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

728 729 731 732 733 735 737 740 746

104 105 106 107 108 109 110 111

Iterators library summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relations among iterator categories . . . . . . . . . . . . . . . . . . . . . . . Iterator requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Input iterator requirements (in addition to Iterator) . . . . . . . . . . . . . Output iterator requirements (in addition to Iterator) . . . . . . . . . . . . Forward iterator requirements (in addition to input iterator) . . . . . . . . Bidirectional iterator requirements (in addition to forward iterator) . . . . . Random access iterator requirements (in addition to bidirectional iterator)

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

829 829 831 831 832 833 833 834

112 Algorithms library summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863 113 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900 114 115 116 117 118 119 120

Numerics library summary . . . . . . . . . . . . Seed sequence requirements . . . . . . . . . . . . Uniform random number generator requirements Random number engine requirements . . . . . . Random number distribution requirements . . . Header synopsis . . . . . . . . . . . . . Header synopsis . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

902 915 916 917 921 984 985

121 122 123 124 125 126 127 128 129 130 131 132 133

Input/output library summary fmtflags effects . . . . . . . . fmtflags constants . . . . . . iostate effects . . . . . . . . . openmode effects . . . . . . . . seekdir effects . . . . . . . . . Position type requirements . . basic_ios::init() effects . . basic_ios::copyfmt() effects seekoff positioning . . . . . . newoff values . . . . . . . . . . File open modes . . . . . . . . seekoff effects . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

989 999 999 999 1000 1000 1004 1007 1008 1054 1054 1064 1067

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

List of Tables

© ISO/IEC 2011 – All rights reserved

xiii

ISO/IEC 14882:2011(E)

134 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074 135 Header synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075 136 137 138 139

. . . a . . . . .

. . . . . . . . . . . . match . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . against a character con. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1076 1077 1087

140 141 142 143

Regular expressions library summary . . . . . . . . . . . . . . Regular expression traits class requirements . . . . . . . . . . syntax_option_type effects . . . . . . . . . . . . . . . . . . regex_constants::match_flag_type effects when obtaining tainer sequence [first,last). . . . . . . . . . . . . . . . . . error_type values in the C locale . . . . . . . . . . . . . . . match_results assignment operator effects . . . . . . . . . . Effects of regex_match algorithm . . . . . . . . . . . . . . . Effects of regex_search algorithm . . . . . . . . . . . . . . .

144 145 146 147

Atomics library summary . . . . atomic integral typedefs . . . . . atomic typedefs . Atomic arithmetic computations

. . . .

. . . .

. . . .

1122 1131 1132 1136

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

1087 1088 1105 1109 1110

148 Thread support library summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1140 149 150 151 152 153

Standard Standard Standard Standard Standard

macros . values . . types . . structs . functions

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

1225 1225 1226 1226 1226

154 155 156 157 158 159

C headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . strstreambuf(streamsize) effects . . . . . . . . . . . . . . . . strstreambuf(void* (*)(size_t), void (*)(void*)) effects strstreambuf(charT*, streamsize, charT*) effects . . . . . . seekoff positioning . . . . . . . . . . . . . . . . . . . . . . . . . newoff values . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

1229 1233 1233 1234 1236 1236

List of Tables

xiv

© ISO/IEC 2011 – All rights reserved

ISO/IEC 14882:2011(E)

List of Figures 1

Expression category taxonomy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 3 4 5 6

Directed acyclic graph . . . . Non-virtual base . . . . . . . Virtual base . . . . . . . . . . Virtual and non-virtual base Name lookup . . . . . . . . .

7

Stream position, offset, and size types [non-normative] . . . . . . . . . . . . . . . . . . . . . . . . 989

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

78 234 235 236 236 239

List of Figures

© ISO/IEC 2011 – All rights reserved

xv

ISO/IEC 14882:2011(E)

Foreword ISO (the International Organization for Standardization) and IEC (the International Electrotechnical Commission) form the specialized system for worldwide standardization. National bodies that are members of ISO or IEC participate in the development of International Standards through technical committees established by the respective organization to deal with particular fields of technical activity. ISO and IEC technical committees collaborate in fields of mutual interest. Other international organizations, governmental and non-governmental, in liaison with ISO and IEC, also take part in the work. In the field of information technology, ISO and IEC have established a joint technical committee, ISO/IEC JTC 1. International Standards are drafted in accordance with the rules given in the ISO/IEC Directives, Part 2. The main task of the joint technical committee is to prepare International Standards. Draft International Standards adopted by the joint technical committee are circulated to national bodies for voting. Publication as an International Standard requires approval by at least 75 % of the national bodies casting a vote. Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. ISO and IEC shall not be held responsible for identifying any or all such patent rights. ISO/IEC 14882 was prepared by Joint Technical Committee ISO/IEC JTC 1, Information technology, Subcommittee SC 22, Programming languages, their environments and system software interfaces. This third edition cancels and replaces the second edition (ISO/IEC 14882:2003), which has been technically revised.

xvi

© ISO/IEC 2011 – All rights reserved

INTERNATIONAL STANDARD

1 1.1

ISO/IEC 14882:2011(E)

General

[intro]

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 also defines C++. Other requirements and relaxations of the first requirement appear at various places within this International Standard.

2

C++ is a general purpose programming language based on the C programming language as specified in ISO/IEC 9899:1999, Programming languages — C (hereinafter referred to as the C standard). In addition to the facilities provided by C, C++ provides additional data types, classes, templates, exceptions, namespaces, operator overloading, function name overloading, references, free store management operators, and additional library facilities.

1.2 1

Normative references

[intro.refs]

The following referenced documents are indispensable for the application of this document. For dated references, 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 and system software interfaces — Extensions for the programming language C to support new character data types

2

The library described in Clause 7 of ISO/IEC 9899:1999 and Clause 7 of ISO/IEC 9899:1999/Cor.1:2001 and Clause 7 of ISO/IEC 9899:1999/Cor.2:2004 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.3, the C standard library is a subset of the C++ standard library.

§ 1.2

© ISO/IEC 2011 – All rights reserved

1

ISO/IEC 14882:2011(E)

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] argument actual argument actual parameter expression in the comma-separated list bounded by the parentheses 1.3.2 [defns.argument.macro] argument actual argument actual parameter sequence of preprocessing tokens in the comma-separated list bounded by the parentheses 1.3.3 argument actual argument actual parameter the operand of throw

[defns.argument.throw]

1.3.4 [defns.argument.templ] argument actual argument actual parameter