1<section xmlns="http://docbook.org/ns/docbook" version="5.0" 2 xml:id="status.iso.1998" xreflabel="ISO C++ 1998"> 3<?dbhtml filename="status_iso_cxx1998.html"?> 4 5<info><title>C++ 1998/2003</title> 6 <keywordset> 7 <keyword>ISO C++</keyword> 8 <keyword>1998</keyword> 9 </keywordset> 10</info> 11 12 13<section xml:id="iso.1998.status" xreflabel="Implementation Status"> 14<info><title>Implementation Status</title></info> 15 16<para> 17This status table is based on the table of contents of ISO/IEC 14882:2003. 18</para> 19 20<para> 21This section describes the C++ support in the GCC 10 release series. 22</para> 23 24<!-- Status is Yes or No, Broken/Partial--> 25<!-- 26 Yes 27 28 No 29 <?dbhtml bgcolor="#C8B0B0" ?> 30 Broken/Partial 31 <?dbhtml bgcolor="#B0B0B0" ?> 32--> 33<table frame="all" xml:id="table.cxx98_status"> 34 <title>C++ 1998/2003 Implementation Status</title> 35 36<tgroup cols="4" align="left" colsep="0" rowsep="1"> 37<colspec colname="c1"/> 38<colspec colname="c2"/> 39<colspec colname="c3"/> 40<colspec colname="c4"/> 41 <thead> 42 <row> 43 <entry>Section</entry> 44 <entry>Description</entry> 45 <entry>Status</entry> 46 <entry>Comments</entry> 47 </row> 48 </thead> 49 50 <tbody> 51 <row> 52 <entry> 53 <emphasis>18</emphasis> 54 </entry> 55 <entry namest="c2" nameend="c4" align="left"> 56 <emphasis>Language support</emphasis> 57 </entry> 58 </row> 59 60 <row> 61 <entry>18.1</entry> 62 <entry>Types</entry> 63 <entry>Y</entry> 64 <entry/> 65 </row> 66 <row> 67 <entry>18.2</entry> 68 <entry>Implementation properties</entry> 69 <entry>Y</entry> 70 <entry/> 71 </row> 72 <row> 73 <entry>18.2.1</entry> 74 <entry>Numeric Limits</entry> 75 <entry/> 76 <entry/> 77 </row> 78 <row> 79 <entry>18.2.1.1</entry> 80 <entry>Class template <code>numeric_limits</code></entry> 81 <entry>Y</entry> 82 <entry/> 83 </row> 84 <row> 85 <entry>18.2.1.2</entry> 86 <entry><code>numeric_limits</code> members</entry> 87 <entry>Y</entry> 88 </row> 89 <row> 90 <entry>18.2.1.3</entry> 91 <entry><code>float_round_style</code></entry> 92 <entry>Y</entry> 93 </row> 94 <row> 95 <entry>18.2.1.4</entry> 96 <entry><code>float_denorm_style</code></entry> 97 <entry>Y</entry> 98 </row> 99 <row> 100 <entry>18.2.1.5</entry> 101 <entry><code>numeric_limits</code> specializations</entry> 102 <entry>Y</entry> 103 <entry/> 104 </row> 105 <row> 106 <entry>18.2.2</entry> 107 <entry>C Library</entry> 108 <entry>Y</entry> 109 <entry/> 110 </row> 111 <row> 112 <entry>18.3</entry> 113 <entry>Start and termination</entry> 114 <entry>Y</entry> 115 <entry/> 116 </row> 117 <row> 118 <entry>18.4</entry> 119 <entry>Dynamic memory management</entry> 120 <entry>Y</entry> 121 <entry/> 122 </row> 123 <row> 124 <entry>18.5</entry> 125 <entry>Type identification</entry> 126 <entry/> 127 <entry/> 128 </row> 129 <row> 130 <entry>18.5.1</entry> 131 <entry>Class type_info</entry> 132 <entry>Y</entry> 133 <entry/> 134 </row> 135 <row> 136 <entry>18.5.2</entry> 137 <entry>Class bad_cast</entry> 138 <entry>Y</entry> 139 <entry/> 140 </row> 141 <row> 142 <entry>18.5.3</entry> 143 <entry>Class bad_typeid</entry> 144 <entry>Y</entry> 145 <entry/> 146 </row> 147 <row> 148 <entry>18.6</entry> 149 <entry>Exception handling</entry> 150 <entry/> 151 <entry/> 152 </row> 153 <row> 154 <entry>18.6.1</entry> 155 <entry>Class exception</entry> 156 <entry>Y</entry> 157 <entry/> 158 </row> 159 <row> 160 <entry>18.6.2</entry> 161 <entry>Violation exception-specifications</entry> 162 <entry>Y</entry> 163 <entry/> 164 </row> 165 <row> 166 <entry>18.6.3</entry> 167 <entry>Abnormal termination</entry> 168 <entry>Y</entry> 169 <entry/> 170 </row> 171 <row> 172 <entry>18.6.4</entry> 173 <entry><code>uncaught_exception</code></entry> 174 <entry>Y</entry> 175 <entry/> 176 </row> 177 <row> 178 <entry>18.7</entry> 179 <entry>Other runtime support</entry> 180 <entry>Y</entry> 181 <entry/> 182 </row> 183 <row> 184 <entry> 185 <emphasis>19</emphasis> 186 </entry> 187 <entry namest="c2" nameend="c4" align="left"> 188 <emphasis>Diagnostics</emphasis> 189 </entry> 190 </row> 191 <row> 192 <entry>19.1</entry> 193 <entry>Exception classes</entry> 194 <entry>Y</entry> 195 <entry/> 196 </row> 197 <row> 198 <entry>19.2</entry> 199 <entry>Assertions</entry> 200 <entry>Y</entry> 201 <entry/> 202 </row> 203 <row> 204 <entry>19.3</entry> 205 <entry>Error numbers</entry> 206 <entry>Y</entry> 207 <entry/> 208 </row> 209 <row> 210 <entry> 211 <emphasis>20</emphasis> 212 </entry> 213 <entry namest="c2" nameend="c4" align="left"> 214 <emphasis>General utilities</emphasis> 215 </entry> 216 </row> 217 <row> 218 <entry>20.1</entry> 219 <entry>Requirements</entry> 220 <entry>Y</entry> 221 <entry/> 222 </row> 223 <row> 224 <entry>20.2</entry> 225 <entry>Utility components</entry> 226 <entry/> 227 <entry/> 228 </row> 229 <row> 230 <entry>20.2.1</entry> 231 <entry>Operators</entry> 232 <entry>Y</entry> 233 <entry/> 234 </row> 235 <row> 236 <entry>20.2.2</entry> 237 <entry><code>pair</code></entry> 238 <entry>Y</entry> 239 <entry/> 240 </row> 241 <row> 242 <entry>20.3</entry> 243 <entry>Function objects</entry> 244 <entry/> 245 <entry/> 246 </row> 247 <row> 248 <entry>20.3.1</entry> 249 <entry>Base</entry> 250 <entry>Y</entry> 251 <entry/> 252 </row> 253 <row> 254 <entry>20.3.2</entry> 255 <entry>Arithmetic operation</entry> 256 <entry>Y</entry> 257 <entry/> 258 </row> 259 <row> 260 <entry>20.3.3</entry> 261 <entry>Comparisons</entry> 262 <entry>Y</entry> 263 <entry/> 264 </row> 265 <row> 266 <entry>20.3.4</entry> 267 <entry>Logical operations</entry> 268 <entry>Y</entry> 269 <entry/> 270 </row> 271 <row> 272 <entry>20.3.5</entry> 273 <entry>Negators</entry> 274 <entry>Y</entry> 275 <entry/> 276 </row> 277 <row> 278 <entry>20.3.6</entry> 279 <entry>Binders</entry> 280 <entry>Y</entry> 281 <entry/> 282 </row> 283 <row> 284 <entry>20.3.7</entry> 285 <entry>Adaptors for pointers to functions</entry> 286 <entry>Y</entry> 287 <entry/> 288 </row> 289 <row> 290 <entry>20.3.8</entry> 291 <entry>Adaptors for pointers to members</entry> 292 <entry>Y</entry> 293 <entry/> 294 </row> 295 <row> 296 <entry>20.4</entry> 297 <entry>Memory</entry> 298 <entry/> 299 <entry/> 300 </row> 301 <row> 302 <entry>20.4.1</entry> 303 <entry>The default allocator</entry> 304 <entry>Y</entry> 305 <entry/> 306 </row> 307 <row> 308 <entry>20.4.2</entry> 309 <entry>Raw storage iterator</entry> 310 <entry>Y</entry> 311 <entry/> 312 </row> 313 <row> 314 <entry>20.4.3</entry> 315 <entry>Temporary buffers</entry> 316 <entry>Y</entry> 317 <entry/> 318 </row> 319 <row> 320 <entry>20.4.4</entry> 321 <entry>Specialized algorithms</entry> 322 <entry>Y</entry> 323 <entry/> 324 </row> 325 <row> 326 <entry>20.4.4.1</entry> 327 <entry><code>uninitialized_copy</code></entry> 328 <entry>Y</entry> 329 <entry/> 330 </row> 331 <row> 332 <entry>20.4.4.2</entry> 333 <entry><code>uninitialized_fill</code></entry> 334 <entry>Y</entry> 335 <entry/> 336 </row> 337 <row> 338 <entry>20.4.4.3</entry> 339 <entry><code>uninitialized_fill_n</code></entry> 340 <entry>Y</entry> 341 <entry/> 342 </row> 343 <row> 344 <entry>20.4.5</entry> 345 <entry>Class template <code>auto_ptr</code></entry> 346 <entry>Y</entry> 347 <entry/> 348 </row> 349 <row> 350 <entry>20.4.6</entry> 351 <entry>C library</entry> 352 <entry>Y</entry> 353 <entry/> 354 </row> 355 <row> 356 <entry> 357 <emphasis>21</emphasis> 358 </entry> 359 <entry namest="c2" nameend="c4" align="left"> 360 <emphasis>Strings</emphasis> 361 </entry> 362 </row> 363 <row> 364 <entry>21.1</entry> 365 <entry>Character traits</entry> 366 <entry/> 367 <entry/> 368 </row> 369 <row> 370 <entry>21.1.1</entry> 371 <entry>Character traits requirements</entry> 372 <entry>Y</entry> 373 <entry/> 374 </row> 375 <row> 376 <entry>21.1.2</entry> 377 <entry>traits typedef</entry> 378 <entry>Y</entry> 379 <entry/> 380 </row> 381 <row> 382 <entry>21.1.3</entry> 383 <entry><code>char_traits</code> specializations</entry> 384 <entry/> 385 <entry/> 386 </row> 387 <row> 388 <entry>21.1.3.1</entry> 389 <entry>struct <code>char_traits<char></code></entry> 390 <entry>Y</entry> 391 <entry/> 392 </row> 393 <row> 394 <entry>21.1.3.2</entry> 395 <entry>struct <code>char_traits<wchar_t></code></entry> 396 <entry>Y</entry> 397 <entry/> 398 </row> 399 <row> 400 <entry>21.2</entry> 401 <entry>String classes</entry> 402 <entry>Y</entry> 403 <entry/> 404 </row> 405 <row> 406 <entry>21.3</entry> 407 <entry>Class template <code>basic_string</code></entry> 408 <entry>Y</entry> 409 <entry/> 410 </row> 411 <row> 412 <entry>21.4</entry> 413 <entry>Null-terminated sequence utilities</entry> 414 <entry>Y</entry> 415 <entry>C library dependency</entry> 416 </row> 417 <row> 418 <entry> 419 <emphasis>22</emphasis> 420 </entry> 421 <entry namest="c2" nameend="c4" align="left"> 422 <emphasis>Localization</emphasis> 423 </entry> 424 </row> 425 <row> 426 <entry>22.1</entry> 427 <entry>Locales</entry> 428 <entry/> 429 <entry/> 430 </row> 431 <row> 432 <entry>22.1.1</entry> 433 <entry>Class <code>locale</code></entry> 434 <entry>Y</entry> 435 <entry/> 436 </row> 437 <row> 438 <entry>22.1.2</entry> 439 <entry><code>locale</code> globals</entry> 440 <entry>Y</entry> 441 <entry/> 442 </row> 443 <row> 444 <entry>22.1.3</entry> 445 <entry>Convenience interfaces</entry> 446 <entry/> 447 <entry/> 448 </row> 449 <row> 450 <entry>22.1.3.1</entry> 451 <entry>Character classification</entry> 452 <entry>Y</entry> 453 <entry/> 454 </row> 455 <row> 456 <entry>22.1.3.2</entry> 457 <entry>Character conversions</entry> 458 <entry>Y</entry> 459 <entry/> 460 </row> 461 <row> 462 <entry>22.2</entry> 463 <entry>Standard locale categories</entry> 464 <entry/> 465 <entry/> 466 </row> 467 <row> 468 <entry>22.2.1</entry> 469 <entry><code>ctype</code></entry> 470 <entry>Y</entry> 471 <entry/> 472 </row> 473 <row> 474 <entry>22.2.2</entry> 475 <entry>Numeric</entry> 476 <entry/> 477 <entry/> 478 </row> 479 <row> 480 <entry>22.2.2.1</entry> 481 <entry><code>num_get</code></entry> 482 <entry>Y</entry> 483 <entry/> 484 </row> 485 <row> 486 <entry>22.2.2.2</entry> 487 <entry><code>num_put</code></entry> 488 <entry>Y</entry> 489 <entry/> 490 </row> 491 <row> 492 <entry>22.2.3</entry> 493 <entry><code>num_punct</code></entry> 494 <entry>Y</entry> 495 <entry/> 496 </row> 497 <row> 498 <entry>22.2.4</entry> 499 <entry><code>collate</code></entry> 500 <entry>Y</entry> 501 <entry/> 502 </row> 503 <row> 504 <entry>22.2.5</entry> 505 <entry>Time</entry> 506 <entry/> 507 <entry/> 508 </row> 509 <row> 510 <entry>22.2.5.1</entry> 511 <entry><code>time_get</code></entry> 512 <entry>Y</entry> 513 <entry/> 514 </row> 515 <row> 516 <entry>22.2.5.2</entry> 517 <entry><code>time_get_byname</code></entry> 518 <entry>Y</entry> 519 <entry/> 520 </row> 521 <row> 522 <entry>22.2.5.3</entry> 523 <entry><code>time_put</code></entry> 524 <entry>Y</entry> 525 <entry/> 526 </row> 527 <row> 528 <entry>22.2.5.3</entry> 529 <entry><code>time_put_byname</code></entry> 530 <entry>Y</entry> 531 <entry/> 532 </row> 533 <row> 534 <entry>22.2.6</entry> 535 <entry>Monetary</entry> 536 <entry/> 537 <entry/> 538 </row> 539 <row> 540 <entry>22.2.6.1</entry> 541 <entry><code>money_get</code></entry> 542 <entry>Y</entry> 543 <entry/> 544 </row> 545 <row> 546 <entry>22.2.6.2</entry> 547 <entry><code>money_put</code></entry> 548 <entry>Y</entry> 549 <entry/> 550 </row> 551 <row> 552 <entry>22.2.6.3</entry> 553 <entry><code>money_punct</code></entry> 554 <entry>Y</entry> 555 <entry/> 556 </row> 557 <row> 558 <entry>22.2.6.4</entry> 559 <entry><code>money_punct_byname</code></entry> 560 <entry>Y</entry> 561 <entry/> 562 </row> 563 <row> 564 <entry>22.2.7</entry> 565 <entry><code>messages</code></entry> 566 <entry>Y</entry> 567 <entry/> 568 </row> 569 <row> 570 <entry>22.2.8</entry> 571 <entry>Program-defined facets</entry> 572 <entry>Y</entry> 573 <entry/> 574 </row> 575 <row> 576 <entry>22.3</entry> 577 <entry>C Library Locales</entry> 578 <entry>Y</entry> 579 <entry/> 580 </row> 581 <row> 582 <entry> 583 <emphasis>23</emphasis> 584 </entry> 585 <entry namest="c2" nameend="c4" align="left"> 586 <emphasis>Containers</emphasis> 587 </entry> 588 </row> 589 <row> 590 <entry>23.1</entry> 591 <entry>Container requirements</entry> 592 <entry>Y</entry> 593 <entry/> 594 </row> 595 <row> 596 <entry>23.2</entry> 597 <entry>Sequence containers</entry> 598 <entry/> 599 <entry/> 600 </row> 601 <row> 602 <entry>23.2.1</entry> 603 <entry>Class template <code>deque</code></entry> 604 <entry>Y</entry> 605 <entry/> 606 </row> 607 <row> 608 <entry>23.2.2</entry> 609 <entry>Class template <code>list</code></entry> 610 <entry>Y</entry> 611 <entry/> 612 </row> 613 <row> 614 <entry>23.2.3</entry> 615 <entry>Adaptors</entry> 616 <entry/> 617 <entry/> 618 </row> 619 <row> 620 <entry>23.2.3.1</entry> 621 <entry>Class template <code>queue</code></entry> 622 <entry>Y</entry> 623 <entry/> 624 </row> 625 <row> 626 <entry>23.2.3.2</entry> 627 <entry>Class template <code>priority_queue</code></entry> 628 <entry>Y</entry> 629 <entry/> 630 </row> 631 <row> 632 <entry>23.2.3.3</entry> 633 <entry>Class template <code>stack</code></entry> 634 <entry>Y</entry> 635 <entry/> 636 </row> 637 <row> 638 <entry>23.2.4</entry> 639 <entry>Class template <code>vector</code></entry> 640 <entry>Y</entry> 641 <entry/> 642 </row> 643 <row> 644 <entry>23.2.5</entry> 645 <entry>Class <code>vector<bool></code></entry> 646 <entry>Y</entry> 647 <entry/> 648 </row> 649 <row> 650 <entry>23.3</entry> 651 <entry>Associative containers</entry> 652 <entry/> 653 <entry/> 654 </row> 655 <row> 656 <entry>23.3.1</entry> 657 <entry>Class template <code>map</code></entry> 658 <entry>Y</entry> 659 <entry/> 660 </row> 661 <row> 662 <entry>23.3.2</entry> 663 <entry>Class template <code>multimap</code></entry> 664 <entry>Y</entry> 665 <entry/> 666 </row> 667 <row> 668 <entry>23.3.3</entry> 669 <entry>Class template <code>set</code></entry> 670 <entry>Y</entry> 671 <entry/> 672 </row> 673 <row> 674 <entry>23.3.4</entry> 675 <entry>Class template <code>multiset</code></entry> 676 <entry>Y</entry> 677 <entry/> 678 </row> 679 <row> 680 <entry> 681 <emphasis>24</emphasis> 682 </entry> 683 <entry namest="c2" nameend="c4" align="left"> 684 <emphasis>Iterators</emphasis> 685 </entry> 686 </row> 687 <row> 688 <entry>24.1</entry> 689 <entry>Requirements</entry> 690 <entry>Y</entry> 691 <entry/> 692 </row> 693 <row> 694 <entry>24.2</entry> 695 <entry>Header <code><iterator></code> synopsis</entry> 696 <entry>Y</entry> 697 <entry/> 698 </row> 699 <row> 700 <entry>24.3</entry> 701 <entry>Iterator primitives</entry> 702 <entry>Y</entry> 703 <entry/> 704 </row> 705 <row> 706 <entry>24.4</entry> 707 <entry>Predefined iterators and Iterator adaptors</entry> 708 <entry/> 709 <entry/> 710 </row> 711 <row> 712 <entry>24.4.1</entry> 713 <entry>Reverse iterators</entry> 714 <entry>Y</entry> 715 <entry/> 716 </row> 717 <row> 718 <entry>24.4.2</entry> 719 <entry>Insert iterators</entry> 720 <entry>Y</entry> 721 <entry/> 722 </row> 723 <row> 724 <entry>24.5</entry> 725 <entry>Stream iterators</entry> 726 <entry/> 727 <entry/> 728 </row> 729 <row> 730 <entry>24.5.1</entry> 731 <entry>Class template <code>istream_iterator</code></entry> 732 <entry>Y</entry> 733 <entry/> 734 </row> 735 <row> 736 <entry>24.5.2</entry> 737 <entry>Class template <code>ostream_iterator</code></entry> 738 <entry>Y</entry> 739 <entry/> 740 </row> 741 <row> 742 <entry>24.5.3</entry> 743 <entry>Class template <code>istreambuf_iterator</code></entry> 744 <entry>Y</entry> 745 <entry/> 746 </row> 747 <row> 748 <entry>24.5.4</entry> 749 <entry>Class template <code>ostreambuf_iterator</code></entry> 750 <entry>Y</entry> 751 <entry/> 752 </row> 753 <row> 754 <entry> 755 <emphasis>25</emphasis> 756 </entry> 757 <entry namest="c2" nameend="c4" align="left"> 758 <emphasis>Algorithms</emphasis> 759 </entry> 760 </row> 761 <row> 762 <entry>25.1</entry> 763 <entry>Non-modifying sequence operations</entry> 764 <entry>Y</entry> 765 <entry/> 766 </row> 767 <row> 768 <entry>25.2</entry> 769 <entry>Mutating sequence operations</entry> 770 <entry>Y</entry> 771 <entry/> 772 </row> 773 <row> 774 <entry>25.3</entry> 775 <entry>Sorting and related operations</entry> 776 <entry>Y</entry> 777 <entry/> 778 </row> 779 <row> 780 <entry>25.4</entry> 781 <entry>C library algorithms</entry> 782 <entry>Y</entry> 783 <entry/> 784 </row> 785 <row> 786 <entry> 787 <emphasis>26</emphasis> 788 </entry> 789 <entry namest="c2" nameend="c4" align="left"> 790 <emphasis>Numerics</emphasis> 791 </entry> 792 </row> 793 <row> 794 <entry>26.1</entry> 795 <entry>Numeric type requirements</entry> 796 <entry>Y</entry> 797 <entry/> 798 </row> 799 <row> 800 <entry>26.2</entry> 801 <entry>Complex numbers</entry> 802 <entry>Y</entry> 803 <entry/> 804 </row> 805 <row> 806 <entry>26.3</entry> 807 <entry>Numeric arrays</entry> 808 <entry/> 809 <entry/> 810 </row> 811 <row> 812 <entry>26.3.1</entry> 813 <entry>Header <code><valarray></code> synopsis</entry> 814 <entry>Y</entry> 815 <entry/> 816 </row> 817 <row> 818 <entry>26.3.2</entry> 819 <entry>Class template <code>valarray</code></entry> 820 <entry>Y</entry> 821 <entry/> 822 </row> 823 <row> 824 <entry>26.3.3</entry> 825 <entry><code>valarray</code> non-member operations</entry> 826 <entry>Y</entry> 827 <entry/> 828 </row> 829 <row> 830 <entry>26.3.4</entry> 831 <entry>Class <code>slice</code></entry> 832 <entry>Y</entry> 833 <entry/> 834 </row> 835 <row> 836 <entry>26.3.5</entry> 837 <entry>Class template <code>slice_array</code></entry> 838 <entry>Y</entry> 839 <entry/> 840 </row> 841 <row> 842 <entry>26.3.6</entry> 843 <entry>Class <code>gslice</code></entry> 844 <entry>Y</entry> 845 <entry/> 846 </row> 847 <row> 848 <entry>26.3.7</entry> 849 <entry>Class template <code>gslice_array</code></entry> 850 <entry>Y</entry> 851 <entry/> 852 </row> 853 <row> 854 <entry>26.3.8</entry> 855 <entry>Class template <code>mask_array</code></entry> 856 <entry>Y</entry> 857 <entry/> 858 </row> 859 <row> 860 <entry>26.3.9</entry> 861 <entry>Class template <code>indirect_array</code></entry> 862 <entry>Y</entry> 863 <entry/> 864 </row> 865 <row> 866 <entry>26.4</entry> 867 <entry>Generalized numeric operations</entry> 868 <entry/> 869 <entry/> 870 </row> 871 <row> 872 <entry>26.4.1</entry> 873 <entry><code>accumulate</code></entry> 874 <entry>Y</entry> 875 <entry/> 876 </row> 877 <row> 878 <entry>26.4.2</entry> 879 <entry><code>inner_product</code></entry> 880 <entry>Y</entry> 881 <entry/> 882 </row> 883 <row> 884 <entry>26.4.3</entry> 885 <entry><code>partial_sum</code></entry> 886 <entry>Y</entry> 887 <entry/> 888 </row> 889 <row> 890 <entry>26.4.4</entry> 891 <entry><code>adjacent_difference</code></entry> 892 <entry>Y</entry> 893 <entry/> 894 </row> 895 <row> 896 <entry>26.4.5</entry> 897 <entry>iota</entry> 898 <entry>Y</entry> 899 <entry/> 900 </row> 901 <row> 902 <entry>26.5</entry> 903 <entry>C Library</entry> 904 <entry>Y</entry> 905 <entry/> 906 </row> 907 <row> 908 <entry> 909 <emphasis>27</emphasis> 910 </entry> 911 <entry namest="c2" nameend="c4" align="left"> 912 <emphasis>Input/output</emphasis> 913 </entry> 914 </row> 915 <row> 916 <entry>27.1</entry> 917 <entry>Requirements</entry> 918 <entry>Y</entry> 919 <entry/> 920 </row> 921 <row> 922 <entry>27.2</entry> 923 <entry>Forward declarations</entry> 924 <entry>Y</entry> 925 <entry/> 926 </row> 927 <row> 928 <entry>27.3</entry> 929 <entry>Standard iostream objects</entry> 930 <entry>Y</entry> 931 <entry/> 932 </row> 933 <row> 934 <entry>27.3.1</entry> 935 <entry>Narrow stream objects</entry> 936 <entry>Y</entry> 937 <entry/> 938 </row> 939 <row> 940 <entry>27.3.2</entry> 941 <entry>Wide stream objects</entry> 942 <entry>Y</entry> 943 <entry/> 944 </row> 945 <row> 946 <entry>27.4</entry> 947 <entry>Iostreams base classes</entry> 948 <entry>Y</entry> 949 <entry/> 950 </row> 951 <row> 952 <entry>27.5</entry> 953 <entry>Stream buffers</entry> 954 <entry>Y</entry> 955 <entry/> 956 </row> 957 <row> 958 <entry>27.6</entry> 959 <entry>Formatting and manipulators</entry> 960 <entry>Y</entry> 961 <entry/> 962 </row> 963 <row> 964 <entry>27.7</entry> 965 <entry>String-based streams</entry> 966 <entry>Y</entry> 967 <entry/> 968 </row> 969 <row> 970 <entry>27.8</entry> 971 <entry>File-based streams</entry> 972 <entry>Y</entry> 973 <entry/> 974 </row> 975 <row> 976 <entry> 977 <emphasis>Appendix D</emphasis> 978 </entry> 979 <entry namest="c2" nameend="c4" align="left"> 980 <emphasis>Compatibility features</emphasis> 981 </entry> 982 </row> 983 <row> 984 <entry>D.1</entry> 985 <entry>Increment operator with bool operand</entry> 986 <entry/> 987 <entry/> 988 </row> 989 <row> 990 <entry>D.2</entry> 991 <entry><code>static</code> keyword</entry> 992 <entry/> 993 <entry/> 994 </row> 995 <row> 996 <entry>D.3</entry> 997 <entry>Access declarations</entry> 998 <entry/> 999 <entry/> 1000 </row> 1001 <row> 1002 <entry>D.4</entry> 1003 <entry>Implicit conversion from const strings</entry> 1004 <entry/> 1005 <entry/> 1006 </row> 1007 <row> 1008 <entry>D.5</entry> 1009 <entry>C standard library headers</entry> 1010 <entry/> 1011 <entry/> 1012 </row> 1013 <row> 1014 <entry>D.6</entry> 1015 <entry>Old iostreams members</entry> 1016 <entry/> 1017 <entry/> 1018 </row> 1019 <row> 1020 <entry>D.7</entry> 1021 <entry>char* streams</entry> 1022 <entry/> 1023 <entry/> 1024 </row> 1025 1026 </tbody> 1027</tgroup> 1028</table> 1029</section> 1030 1031<section xml:id="iso.1998.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info> 1032 1033 1034 <para> 1035 The ISO standard defines the following phrase: 1036 </para> 1037 <blockquote> 1038 <variablelist> 1039 <varlistentry> 1040 <term> 1041 <code>[1.3.5] implementation-defined behavior</code> 1042 </term> 1043 <listitem> 1044 <para> 1045 Behavior, for a well-formed program construct and correct data, that 1046 depends on the implementation <emphasis>and that each implementation 1047 shall document</emphasis>. 1048 </para> 1049 </listitem> 1050 </varlistentry> 1051 </variablelist> 1052 </blockquote> 1053 <para> 1054 We do so here, for the C++ library only. Behavior of the 1055 compiler, linker, runtime loader, and other elements of "the 1056 implementation" are documented elsewhere. Everything listed 1057 in Annex B, Implementation Qualities, are also part of the 1058 compiler, not the library. 1059 </para> 1060 <para> 1061 For each entry, we give the section number of the standard, when 1062 applicable. This list is probably incomplet and inkorrekt. 1063 </para> 1064 <para> 1065 <emphasis>[1.9]/11 #3</emphasis> If <code>isatty(3)</code> is true, then 1066 interactive stream support is implied. 1067 </para> 1068 <para> 1069 <emphasis>[17.4.4.5]</emphasis> Non-reentrant functions are probably best 1070 discussed in the various sections on multithreading (see above). 1071 </para> 1072 <!-- [17.4.4.8]/3 says any function that doesn't have an exception-spec 1073 can throw whatever we want; see also its footnote. Let's list those 1074 in the sections where the function itself occurs. 1075 --> 1076 <para><emphasis>[18.1]/4</emphasis> The type of <code>NULL</code> is described 1077 under <link linkend="std.support.types.null">Support</link>. 1078 </para> 1079 <para><emphasis>[18.3]/8</emphasis> Even though it's listed in the library 1080 sections, libstdc++ has zero control over what the cleanup code hands 1081 back to the runtime loader. Talk to the compiler people. :-) 1082 </para> 1083 <para><emphasis>[18.4.2.1]/5</emphasis> (bad_alloc), 1084 <emphasis>[18.5.2]/5</emphasis> (bad_cast), 1085 <emphasis>[18.5.3]/5</emphasis> (bad_typeid), 1086 <emphasis>[18.6.1]/8</emphasis> (exception), 1087 <emphasis>[18.6.2.1]/5</emphasis> (bad_exception): The <code>what()</code> 1088 member function of class <code>std::exception</code>, and these other 1089 classes publicly derived from it, returns the name of the 1090 class, e.g. <literal>"std::bad_alloc"</literal>. 1091 </para> 1092 <para><emphasis>[18.5.1]/7</emphasis> The return value of 1093 <code>std::type_info::name()</code> is the mangled type name. 1094 You will need to call <code>c++filt</code> and pass the names as 1095 command-line parameters to demangle them, or call a 1096 <link linkend="manual.ext.demangle">runtime demangler function</link>. 1097 </para> 1098 <para><emphasis>[20.1.5]/5</emphasis> <emphasis>"Implementors are encouraged to 1099 supply libraries that can accept allocators that encapsulate more 1100 general memory models and that support non-equal instances. In such 1101 implementations, any requirements imposed on allocators by containers 1102 beyond those requirements that appear in Table 32, and the semantics 1103 of containers and algorithms when allocator instances compare 1104 non-equal, are implementation-defined."</emphasis> There is experimental 1105 support for non-equal allocators in the standard containers in C++98 1106 mode. There are no additional requirements on allocators. It is undefined 1107 behaviour to swap two containers if their allocators are not equal. 1108 </para> 1109 <para><emphasis>[21.1.3.1]/3,4</emphasis>, 1110 <emphasis>[21.1.3.2]/2</emphasis>, 1111 <emphasis>[21.3]/6 basic_string::iterator, basic_string::const_iterator</emphasis>, 1112 <emphasis>[23.*]'s foo::iterator</emphasis>, 1113 <emphasis>[27.*]'s foo::*_type</emphasis>, 1114 <emphasis>others...</emphasis> 1115 Nope, these types are called implementation-defined because you 1116 shouldn't be taking advantage of their underlying types. Listing them 1117 here would defeat the purpose. :-) 1118 </para> 1119 <para><emphasis>[21.1.3.1]/5</emphasis> I don't really know about 1120 the <type>mbstate_t</type> stuff... see 1121 the <link linkend="std.localization.facet.codecvt"><code>codecvt</code> 1122 notes</link> for what does exist. 1123 </para> 1124 <para><emphasis>[22.*]</emphasis> Anything and everything we have on locale 1125 implementation will be described under 1126 <link linkend="std.localization.locales.locale">Localization</link>. 1127 </para> 1128 <para><emphasis>[23.*]</emphasis> All of the containers in this clause 1129 define <type>size_type</type> as <type>std::size_t</type> and 1130 <type>difference_type</type> as <type>std::ptrdiff_t</type>. 1131 </para> 1132 <para><emphasis>[26.2.8]/9</emphasis> I have no idea what 1133 <code>complex<T></code>'s <code>pow(0,0)</code> returns. 1134 </para> 1135 <para><emphasis>[27.4.2.4]/2</emphasis> Calling 1136 <code>std::ios_base::sync_with_stdio</code> after I/O has already been 1137 performed on the standard stream objects will 1138 flush the buffers, and <!-- this line might go away --> 1139 destroy and recreate the underlying buffer instances. Whether or not 1140 the previously-written I/O is destroyed in this process depends mostly 1141 on the <code>--enable-libio</code> choice: for stdio, if the written 1142 data is already in the stdio buffer, the data may be completely safe! 1143 </para> 1144 <para><emphasis>[27.6.1.1.2]</emphasis>, 1145 <emphasis>[27.6.2.3]</emphasis> The I/O sentry ctor and dtor can perform 1146 additional work than the minimum required. We are not currently taking 1147 advantage of this yet. 1148 </para> 1149 <para><emphasis>[27.7.1.3]/16</emphasis>, 1150 <emphasis>[27.8.1.4]/10</emphasis> 1151 The effects of <code>pubsetbuf/setbuf</code> are described in the 1152 <link linkend="std.io">Input and Output</link> chapter. 1153 </para> 1154 <para><emphasis>[27.8.1.4]/16</emphasis> Calling <code>fstream::sync</code> when 1155 a get area exists will... whatever <code>fflush()</code> does, I think. 1156 </para> 1157 1158</section> 1159 1160</section> 1161