1<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" 2 xml:id="manual.intro.using" xreflabel="Using"> 3 <info><title>Using</title></info> 4 <?dbhtml filename="using.html"?> 5 6 <section xml:id="manual.intro.using.flags" xreflabel="Flags"><info><title>Command Options</title></info> 7 8 <para> 9 The set of features available in the GNU C++ library is shaped 10 by 11 several <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html">GCC 12 Command Options</link>. Options that impact libstdc++ are 13 enumerated and detailed in the table below. 14 </para> 15 16 <para> 17 By default, <command>g++</command> is equivalent to <command>g++ -std=gnu++98</command>. The standard library also defaults to this dialect. 18 </para> 19 20 <table frame="all"> 21<title>C++ Command Options</title> 22 23<tgroup cols="2" align="left" colsep="1" rowsep="1"> 24<colspec colname="c1"/> 25<colspec colname="c2"/> 26 27 <thead> 28 <row> 29 <entry>Option Flags</entry> 30 <entry>Description</entry> 31 </row> 32 </thead> 33 34 <tbody> 35 <row> 36 <entry><literal>-std=c++98</literal></entry> 37 <entry>Use the 1998 ISO C++ standard plus amendments.</entry> 38 </row> 39 40 <row> 41 <entry><literal>-std=gnu++98</literal></entry> 42 <entry>As directly above, with GNU extensions.</entry> 43 </row> 44 45 <row> 46 <entry><literal>-std=c++11</literal></entry> 47 <entry>Use the 2011 ISO C++ standard.</entry> 48 </row> 49 50 <row> 51 <entry><literal>-std=gnu++11</literal></entry> 52 <entry>As directly above, with GNU extensions.</entry> 53 </row> 54 55 <row> 56 <entry><literal>-fexceptions</literal></entry> 57 <entry>See <link linkend="intro.using.exception.no">exception-free dialect</link></entry> 58 </row> 59 60 <row> 61 <entry><literal>-frtti</literal></entry> 62 <entry>As above, but RTTI-free dialect.</entry> 63 </row> 64 65 <row> 66 <entry><literal>-pthread</literal> or <literal>-pthreads</literal></entry> 67 <entry>For ISO C++11 <thread>, <future>, 68 <mutex>, or <condition_variable>.</entry> 69 </row> 70 71 <row> 72 <entry><literal>-fopenmp</literal></entry> 73 <entry>For <link linkend="manual.ext.parallel_mode">parallel</link> mode.</entry> 74 </row> 75 </tbody> 76 77</tgroup> 78</table> 79 80 </section> 81 82 <section xml:id="manual.intro.using.headers" xreflabel="Headers"><info><title>Headers</title></info> 83 <?dbhtml filename="using_headers.html"?> 84 85 86 <section xml:id="manual.intro.using.headers.all" xreflabel="Header Files"><info><title>Header Files</title></info> 87 88 89 <para> 90 The C++ standard specifies the entire set of header files that 91 must be available to all hosted implementations. Actually, the 92 word "files" is a misnomer, since the contents of the 93 headers don't necessarily have to be in any kind of external 94 file. The only rule is that when one <code>#include</code>'s a 95 header, the contents of that header become available, no matter 96 how. 97 </para> 98 99 <para> 100 That said, in practice files are used. 101 </para> 102 103 <para> 104 There are two main types of include files: header files related 105 to a specific version of the ISO C++ standard (called Standard 106 Headers), and all others (TR1, C++ ABI, and Extensions). 107 </para> 108 109 <para> 110 Two dialects of standard headers are supported, corresponding to 111 the 1998 standard as updated for 2003, and the current 2011 standard. 112 </para> 113 114 <para> 115 C++98/03 include files. These are available in the default compilation mode, i.e. <code>-std=c++98</code> or <code>-std=gnu++98</code>. 116 </para> 117 118<table frame="all"> 119<title>C++ 1998 Library Headers</title> 120 121<tgroup cols="5" align="left" colsep="1" rowsep="1"> 122<colspec colname="c1"/> 123<colspec colname="c2"/> 124<colspec colname="c3"/> 125<colspec colname="c4"/> 126<colspec colname="c5"/> 127<tbody> 128<row> 129<entry><filename class="headerfile">algorithm</filename></entry> 130<entry><filename class="headerfile">bitset</filename></entry> 131<entry><filename class="headerfile">complex</filename></entry> 132<entry><filename class="headerfile">deque</filename></entry> 133<entry><filename class="headerfile">exception</filename></entry> 134</row> 135<row> 136<entry><filename class="headerfile">fstream</filename></entry> 137<entry><filename class="headerfile">functional</filename></entry> 138<entry><filename class="headerfile">iomanip</filename></entry> 139<entry><filename class="headerfile">ios</filename></entry> 140<entry><filename class="headerfile">iosfwd</filename></entry> 141</row> 142<row> 143<entry><filename class="headerfile">iostream</filename></entry> 144<entry><filename class="headerfile">istream</filename></entry> 145<entry><filename class="headerfile">iterator</filename></entry> 146<entry><filename class="headerfile">limits</filename></entry> 147<entry><filename class="headerfile">list</filename></entry> 148</row> 149<row> 150<entry><filename class="headerfile">locale</filename></entry> 151<entry><filename class="headerfile">map</filename></entry> 152<entry><filename class="headerfile">memory</filename></entry> 153<entry><filename class="headerfile">new</filename></entry> 154<entry><filename class="headerfile">numeric</filename></entry> 155</row> 156<row> 157<entry><filename class="headerfile">ostream</filename></entry> 158<entry><filename class="headerfile">queue</filename></entry> 159<entry><filename class="headerfile">set</filename></entry> 160<entry><filename class="headerfile">sstream</filename></entry> 161<entry><filename class="headerfile">stack</filename></entry> 162</row> 163<row> 164<entry><filename class="headerfile">stdexcept</filename></entry> 165<entry><filename class="headerfile">streambuf</filename></entry> 166<entry><filename class="headerfile">string</filename></entry> 167<entry><filename class="headerfile">utility</filename></entry> 168<entry><filename class="headerfile">typeinfo</filename></entry> 169</row> 170<row> 171<entry><filename class="headerfile">valarray</filename></entry> 172<entry><filename class="headerfile">vector</filename></entry> 173</row> 174</tbody> 175</tgroup> 176</table> 177 178<para/> 179<table frame="all"> 180<title>C++ 1998 Library Headers for C Library Facilities</title> 181 182<tgroup cols="5" align="left" colsep="1" rowsep="1"> 183<colspec colname="c1"/> 184<colspec colname="c2"/> 185<colspec colname="c3"/> 186<colspec colname="c4"/> 187<colspec colname="c5"/> 188<tbody> 189<row> 190<entry><filename class="headerfile">cassert</filename></entry> 191<entry><filename class="headerfile">cerrno</filename></entry> 192<entry><filename class="headerfile">cctype</filename></entry> 193<entry><filename class="headerfile">cfloat</filename></entry> 194<entry><filename class="headerfile">ciso646</filename></entry> 195</row> 196<row> 197<entry><filename class="headerfile">climits</filename></entry> 198<entry><filename class="headerfile">clocale</filename></entry> 199<entry><filename class="headerfile">cmath</filename></entry> 200<entry><filename class="headerfile">csetjmp</filename></entry> 201<entry><filename class="headerfile">csignal</filename></entry> 202</row> 203<row> 204<entry><filename class="headerfile">cstdarg</filename></entry> 205<entry><filename class="headerfile">cstddef</filename></entry> 206<entry><filename class="headerfile">cstdio</filename></entry> 207<entry><filename class="headerfile">cstdlib</filename></entry> 208<entry><filename class="headerfile">cstring</filename></entry> 209</row> 210<row> 211<entry><filename class="headerfile">ctime</filename></entry> 212<entry><filename class="headerfile">cwchar</filename></entry> 213<entry><filename class="headerfile">cwctype</filename></entry> 214</row> 215</tbody> 216</tgroup> 217</table> 218 219<para> 220C++11 include files. These are only available in C++11 compilation 221mode, i.e. <literal>-std=c++11</literal> or <literal>-std=gnu++11</literal>. 222</para> 223 224<para/> 225<table frame="all"> 226<title>C++ 2011 Library Headers</title> 227 228<tgroup cols="5" align="left" colsep="1" rowsep="1"> 229<colspec colname="c1"/> 230<colspec colname="c2"/> 231<colspec colname="c3"/> 232<colspec colname="c4"/> 233<colspec colname="c5"/> 234<tbody> 235 236<row> 237<entry><filename class="headerfile">algorithm</filename></entry> 238<entry><filename class="headerfile">array</filename></entry> 239<entry><filename class="headerfile">bitset</filename></entry> 240<entry><filename class="headerfile">chrono</filename></entry> 241<entry><filename class="headerfile">complex</filename></entry> 242</row> 243<row> 244<entry><filename class="headerfile">condition_variable</filename></entry> 245<entry><filename class="headerfile">deque</filename></entry> 246<entry><filename class="headerfile">exception</filename></entry> 247<entry><filename class="headerfile">forward_list</filename></entry> 248<entry><filename class="headerfile">fstream</filename></entry> 249</row> 250<row> 251<entry><filename class="headerfile">functional</filename></entry> 252<entry><filename class="headerfile">future</filename></entry> 253<entry><filename class="headerfile">initalizer_list</filename></entry> 254<entry><filename class="headerfile">iomanip</filename></entry> 255<entry><filename class="headerfile">ios</filename></entry> 256</row> 257<row> 258<entry><filename class="headerfile">iosfwd</filename></entry> 259<entry><filename class="headerfile">iostream</filename></entry> 260<entry><filename class="headerfile">istream</filename></entry> 261<entry><filename class="headerfile">iterator</filename></entry> 262<entry><filename class="headerfile">limits</filename></entry> 263</row> 264<row> 265<entry><filename class="headerfile">list</filename></entry> 266<entry><filename class="headerfile">locale</filename></entry> 267<entry><filename class="headerfile">map</filename></entry> 268<entry><filename class="headerfile">memory</filename></entry> 269<entry><filename class="headerfile">mutex</filename></entry> 270</row> 271<row> 272<entry><filename class="headerfile">new</filename></entry> 273<entry><filename class="headerfile">numeric</filename></entry> 274<entry><filename class="headerfile">ostream</filename></entry> 275<entry><filename class="headerfile">queue</filename></entry> 276<entry><filename class="headerfile">random</filename></entry> 277</row> 278<row> 279<entry><filename class="headerfile">ratio</filename></entry> 280<entry><filename class="headerfile">regex</filename></entry> 281<entry><filename class="headerfile">set</filename></entry> 282<entry><filename class="headerfile">sstream</filename></entry> 283<entry><filename class="headerfile">stack</filename></entry> 284</row> 285<row> 286<entry><filename class="headerfile">stdexcept</filename></entry> 287<entry><filename class="headerfile">streambuf</filename></entry> 288<entry><filename class="headerfile">string</filename></entry> 289<entry><filename class="headerfile">system_error</filename></entry> 290<entry><filename class="headerfile">thread</filename></entry> 291</row> 292<row> 293<entry><filename class="headerfile">tuple</filename></entry> 294<entry><filename class="headerfile">type_traits</filename></entry> 295<entry><filename class="headerfile">typeinfo</filename></entry> 296<entry><filename class="headerfile">unordered_map</filename></entry> 297<entry><filename class="headerfile">unordered_set</filename></entry> 298</row> 299<row> 300<entry><filename class="headerfile">utility</filename></entry> 301<entry><filename class="headerfile">valarray</filename></entry> 302<entry><filename class="headerfile">vector</filename></entry> 303</row> 304 305</tbody> 306</tgroup> 307</table> 308 309<para/> 310 311<table frame="all"> 312<title>C++ 2011 Library Headers for C Library Facilities</title> 313 314<tgroup cols="5" align="left" colsep="1" rowsep="1"> 315<colspec colname="c1"/> 316<colspec colname="c2"/> 317<colspec colname="c3"/> 318<colspec colname="c4"/> 319<colspec colname="c5"/> 320<tbody> 321<row> 322<entry><filename class="headerfile">cassert</filename></entry> 323<entry><filename class="headerfile">ccomplex</filename></entry> 324<entry><filename class="headerfile">cctype</filename></entry> 325<entry><filename class="headerfile">cerrno</filename></entry> 326<entry><filename class="headerfile">cfenv</filename></entry> 327</row> 328<row> 329<entry><filename class="headerfile">cfloat</filename></entry> 330<entry><filename class="headerfile">cinttypes</filename></entry> 331<entry><filename class="headerfile">ciso646</filename></entry> 332<entry><filename class="headerfile">climits</filename></entry> 333<entry><filename class="headerfile">clocale</filename></entry> 334</row> 335<row> 336<entry><filename class="headerfile">cmath</filename></entry> 337<entry><filename class="headerfile">csetjmp</filename></entry> 338<entry><filename class="headerfile">csignal</filename></entry> 339<entry><filename class="headerfile">cstdarg</filename></entry> 340<entry><filename class="headerfile">cstdbool</filename></entry> 341</row> 342<row> 343<entry><filename class="headerfile">cstddef</filename></entry> 344<entry><filename class="headerfile">cstdint</filename></entry> 345<entry><filename class="headerfile">cstdlib</filename></entry> 346<entry><filename class="headerfile">cstdio</filename></entry> 347<entry><filename class="headerfile">cstring</filename></entry> 348</row> 349<row> 350<entry><filename class="headerfile">ctgmath</filename></entry> 351<entry><filename class="headerfile">ctime</filename></entry> 352<entry><filename class="headerfile">cuchar</filename></entry> 353<entry><filename class="headerfile">cwchar</filename></entry> 354<entry><filename class="headerfile">cwctype</filename></entry> 355</row> 356</tbody> 357</tgroup> 358</table> 359 360 361<para> 362 In addition, TR1 includes as: 363</para> 364 365<table frame="all"> 366<title>C++ TR 1 Library Headers</title> 367 368<tgroup cols="5" align="left" colsep="1" rowsep="1"> 369<colspec colname="c1"/> 370<colspec colname="c2"/> 371<colspec colname="c3"/> 372<colspec colname="c4"/> 373<colspec colname="c5"/> 374<tbody> 375 376<row> 377<entry><filename class="headerfile">tr1/array</filename></entry> 378<entry><filename class="headerfile">tr1/complex</filename></entry> 379<entry><filename class="headerfile">tr1/memory</filename></entry> 380<entry><filename class="headerfile">tr1/functional</filename></entry> 381<entry><filename class="headerfile">tr1/random</filename></entry> 382</row> 383<row> 384<entry><filename class="headerfile">tr1/regex</filename></entry> 385<entry><filename class="headerfile">tr1/tuple</filename></entry> 386<entry><filename class="headerfile">tr1/type_traits</filename></entry> 387<entry><filename class="headerfile">tr1/unordered_map</filename></entry> 388<entry><filename class="headerfile">tr1/unordered_set</filename></entry> 389</row> 390<row> 391<entry><filename class="headerfile">tr1/utility</filename></entry> 392</row> 393 394</tbody> 395</tgroup> 396</table> 397 398<para/> 399 400 401<table frame="all"> 402<title>C++ TR 1 Library Headers for C Library Facilities</title> 403 404<tgroup cols="5" align="left" colsep="1" rowsep="1"> 405<colspec colname="c1"/> 406<colspec colname="c2"/> 407<colspec colname="c3"/> 408<colspec colname="c4"/> 409<colspec colname="c5"/> 410<tbody> 411 412<row> 413<entry><filename class="headerfile">tr1/ccomplex</filename></entry> 414<entry><filename class="headerfile">tr1/cfenv</filename></entry> 415<entry><filename class="headerfile">tr1/cfloat</filename></entry> 416<entry><filename class="headerfile">tr1/cmath</filename></entry> 417<entry><filename class="headerfile">tr1/cinttypes</filename></entry> 418</row> 419<row> 420<entry><filename class="headerfile">tr1/climits</filename></entry> 421<entry><filename class="headerfile">tr1/cstdarg</filename></entry> 422<entry><filename class="headerfile">tr1/cstdbool</filename></entry> 423<entry><filename class="headerfile">tr1/cstdint</filename></entry> 424<entry><filename class="headerfile">tr1/cstdio</filename></entry> 425</row> 426<row> 427<entry><filename class="headerfile">tr1/cstdlib</filename></entry> 428<entry><filename class="headerfile">tr1/ctgmath</filename></entry> 429<entry><filename class="headerfile">tr1/ctime</filename></entry> 430<entry><filename class="headerfile">tr1/cwchar</filename></entry> 431<entry><filename class="headerfile">tr1/cwctype</filename></entry> 432</row> 433 434</tbody> 435</tgroup> 436</table> 437 438 439<para>Decimal floating-point arithmetic is available if the C++ 440compiler supports scalar decimal floating-point types defined via 441<code>__attribute__((mode(SD|DD|LD)))</code>. 442</para> 443 444<table frame="all"> 445<title>C++ TR 24733 Decimal Floating-Point Header</title> 446 447<tgroup cols="1" align="left" colsep="1" rowsep="1"> 448<colspec colname="c1"/> 449<tbody> 450<row> 451<entry><filename class="headerfile">decimal/decimal</filename></entry> 452</row> 453</tbody> 454</tgroup> 455</table> 456 457<para> 458 Also included are files for the C++ ABI interface: 459</para> 460 461<table frame="all"> 462<title>C++ ABI Headers</title> 463 464<tgroup cols="2" align="left" colsep="1" rowsep="1"> 465<colspec colname="c1"/> 466<colspec colname="c2"/> 467<tbody> 468<row><entry><filename class="headerfile">cxxabi.h</filename></entry><entry><filename class="headerfile">cxxabi_forced.h</filename></entry></row> 469</tbody> 470</tgroup> 471</table> 472 473<para> 474 And a large variety of extensions. 475</para> 476 477<table frame="all"> 478<title>Extension Headers</title> 479 480<tgroup cols="5" align="left" colsep="1" rowsep="1"> 481<colspec colname="c1"/> 482<colspec colname="c2"/> 483<colspec colname="c3"/> 484<colspec colname="c4"/> 485<colspec colname="c5"/> 486<tbody> 487 488<row> 489<entry><filename class="headerfile">ext/algorithm</filename></entry> 490<entry><filename class="headerfile">ext/atomicity.h</filename></entry> 491<entry><filename class="headerfile">ext/array_allocator.h</filename></entry> 492<entry><filename class="headerfile">ext/bitmap_allocator.h</filename></entry> 493<entry><filename class="headerfile">ext/cast.h</filename></entry> 494</row> 495<row> 496<entry><filename class="headerfile">ext/codecvt_specializations.h</filename></entry> 497<entry><filename class="headerfile">ext/concurrence.h</filename></entry> 498<entry><filename class="headerfile">ext/debug_allocator.h</filename></entry> 499<entry><filename class="headerfile">ext/enc_filebuf.h</filename></entry> 500<entry><filename class="headerfile">ext/extptr_allocator.h</filename></entry> 501</row> 502<row> 503<entry><filename class="headerfile">ext/functional</filename></entry> 504<entry><filename class="headerfile">ext/iterator</filename></entry> 505<entry><filename class="headerfile">ext/malloc_allocator.h</filename></entry> 506<entry><filename class="headerfile">ext/memory</filename></entry> 507<entry><filename class="headerfile">ext/mt_allocator.h</filename></entry> 508</row> 509<row> 510<entry><filename class="headerfile">ext/new_allocator.h</filename></entry> 511<entry><filename class="headerfile">ext/numeric</filename></entry> 512<entry><filename class="headerfile">ext/numeric_traits.h</filename></entry> 513<entry><filename class="headerfile">ext/pb_ds/assoc_container.h</filename></entry> 514<entry><filename class="headerfile">ext/pb_ds/priority_queue.h</filename></entry> 515</row> 516<row> 517<entry><filename class="headerfile">ext/pod_char_traits.h</filename></entry> 518<entry><filename class="headerfile">ext/pool_allocator.h</filename></entry> 519<entry><filename class="headerfile">ext/rb_tree</filename></entry> 520<entry><filename class="headerfile">ext/rope</filename></entry> 521<entry><filename class="headerfile">ext/slist</filename></entry> 522</row> 523<row> 524<entry><filename class="headerfile">ext/stdio_filebuf.h</filename></entry> 525<entry><filename class="headerfile">ext/stdio_sync_filebuf.h</filename></entry> 526<entry><filename class="headerfile">ext/throw_allocator.h</filename></entry> 527<entry><filename class="headerfile">ext/typelist.h</filename></entry> 528<entry><filename class="headerfile">ext/type_traits.h</filename></entry> 529</row> 530<row> 531<entry><filename class="headerfile">ext/vstring.h</filename></entry> 532</row> 533 534</tbody> 535</tgroup> 536</table> 537 538<para/> 539 540<table frame="all"> 541<title>Extension Debug Headers</title> 542 543<tgroup cols="5" align="left" colsep="1" rowsep="1"> 544<colspec colname="c1"/> 545<colspec colname="c2"/> 546<colspec colname="c3"/> 547<colspec colname="c4"/> 548<colspec colname="c5"/> 549<tbody> 550 551<row> 552<entry><filename class="headerfile">debug/bitset</filename></entry> 553<entry><filename class="headerfile">debug/deque</filename></entry> 554<entry><filename class="headerfile">debug/list</filename></entry> 555<entry><filename class="headerfile">debug/map</filename></entry> 556<entry><filename class="headerfile">debug/set</filename></entry> 557</row> 558 559<row> 560<entry><filename class="headerfile">debug/string</filename></entry> 561<entry><filename class="headerfile">debug/unordered_map</filename></entry> 562<entry><filename class="headerfile">debug/unordered_set</filename></entry> 563<entry><filename class="headerfile">debug/vector</filename></entry> 564</row> 565 566</tbody> 567</tgroup> 568</table> 569 570<para/> 571 572<table frame="all"> 573<title>Extension Profile Headers</title> 574 575<tgroup cols="4" align="left" colsep="1" rowsep="1"> 576<colspec colname="c1"/> 577<colspec colname="c2"/> 578<colspec colname="c3"/> 579<colspec colname="c4"/> 580<tbody> 581 582<row> 583<entry><filename class="headerfile">profile/bitset</filename></entry> 584<entry><filename class="headerfile">profile/deque</filename></entry> 585<entry><filename class="headerfile">profile/list</filename></entry> 586<entry><filename class="headerfile">profile/map</filename></entry> 587</row> 588 589<row> 590<entry><filename class="headerfile">profile/set</filename></entry> 591<entry><filename class="headerfile">profile/unordered_map</filename></entry> 592<entry><filename class="headerfile">profile/unordered_set</filename></entry> 593<entry><filename class="headerfile">profile/vector</filename></entry> 594</row> 595 596</tbody> 597</tgroup> 598</table> 599 600<para/> 601 602<table frame="all"> 603<title>Extension Parallel Headers</title> 604 605<tgroup cols="2" align="left" colsep="1" rowsep="1"> 606<colspec colname="c1"/> 607<colspec colname="c2"/> 608<tbody> 609<row> 610<entry><filename class="headerfile">parallel/algorithm</filename></entry> 611<entry><filename class="headerfile">parallel/numeric</filename></entry> 612</row> 613</tbody> 614</tgroup> 615</table> 616 617 </section> 618 619 <section xml:id="manual.intro.using.headers.mixing" xreflabel="Mixing Headers"><info><title>Mixing Headers</title></info> 620 621 622<para> A few simple rules. 623</para> 624 625<para>First, mixing different dialects of the standard headers is not 626possible. It's an all-or-nothing affair. Thus, code like 627</para> 628 629<programlisting> 630#include <array> 631#include <functional> 632</programlisting> 633 634<para>Implies C++11 mode. To use the entities in <array>, the C++11 635compilation mode must be used, which implies the C++11 functionality 636(and deprecations) in <functional> will be present. 637</para> 638 639<para>Second, the other headers can be included with either dialect of 640the standard headers, although features and types specific to C++11 641are still only enabled when in C++11 compilation mode. So, to use 642rvalue references with <code>__gnu_cxx::vstring</code>, or to use the 643debug-mode versions of <code>std::unordered_map</code>, one must use 644the <code>std=gnu++11</code> compiler flag. (Or <code>std=c++11</code>, of course.) 645</para> 646 647<para>A special case of the second rule is the mixing of TR1 and C++11 648facilities. It is possible (although not especially prudent) to 649include both the TR1 version and the C++11 version of header in the 650same translation unit: 651</para> 652 653<programlisting> 654#include <tr1/type_traits> 655#include <type_traits> 656</programlisting> 657 658<para> Several parts of C++11 diverge quite substantially from TR1 predecessors. 659</para> 660 </section> 661 662 <section xml:id="manual.intro.using.headers.cheaders" xreflabel="C Headers and"><info><title>The C Headers and <code>namespace std</code></title></info> 663 664 665<para> 666 The standard specifies that if one includes the C-style header 667 (<math.h> in this case), the symbols will be available 668 in the global namespace and perhaps in 669 namespace <code>std::</code> (but this is no longer a firm 670 requirement.) On the other hand, including the C++-style 671 header (<cmath>) guarantees that the entities will be 672 found in namespace std and perhaps in the global namespace. 673 </para> 674 675<para> 676Usage of C++-style headers is recommended, as then 677C-linkage names can be disambiguated by explicit qualification, such 678as by <code>std::abort</code>. In addition, the C++-style headers can 679use function overloading to provide a simpler interface to certain 680families of C-functions. For instance in <cmath>, the 681function <code>std::sin</code> has overloads for all the builtin 682floating-point types. This means that <code>std::sin</code> can be 683used uniformly, instead of a combination 684of <code>std::sinf</code>, <code>std::sin</code>, 685and <code>std::sinl</code>. 686</para> 687 </section> 688 689 <section xml:id="manual.intro.using.headers.pre" xreflabel="Precompiled Headers"><info><title>Precompiled Headers</title></info> 690 691 692 693<para>There are three base header files that are provided. They can be 694used to precompile the standard headers and extensions into binary 695files that may the be used to speed compiles that use these headers. 696</para> 697 698 699<itemizedlist> 700<listitem> 701 <para>stdc++.h</para> 702<para>Includes all standard headers. Actual content varies depending on 703language dialect. 704</para> 705</listitem> 706 707<listitem> 708 <para>stdtr1c++.h</para> 709<para>Includes all of <stdc++.h>, and adds all the TR1 headers. 710</para> 711</listitem> 712 713<listitem><para>extc++.h</para> 714<para>Includes all of <stdtr1c++.h>, and adds all the Extension headers. 715</para></listitem> 716</itemizedlist> 717 718<para>How to construct a .gch file from one of these base header files.</para> 719 720<para>First, find the include directory for the compiler. One way to do 721this is:</para> 722 723<programlisting> 724g++ -v hello.cc 725 726#include <...> search starts here: 727 /mnt/share/bld/H-x86-gcc.20071201/include/c++/4.3.0 728... 729End of search list. 730</programlisting> 731 732 733<para>Then, create a precompiled header file with the same flags that 734will be used to compile other projects.</para> 735 736<programlisting> 737g++ -Winvalid-pch -x c++-header -g -O2 -o ./stdc++.h.gch /mnt/share/bld/H-x86-gcc.20071201/include/c++/4.3.0/x86_64-unknown-linux-gnu/bits/stdc++.h 738</programlisting> 739 740<para>The resulting file will be quite large: the current size is around 741thirty megabytes. </para> 742 743<para>How to use the resulting file.</para> 744 745<programlisting> 746g++ -I. -include stdc++.h -H -g -O2 hello.cc 747</programlisting> 748 749<para>Verification that the PCH file is being used is easy:</para> 750 751<programlisting> 752g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe 753! ./stdc++.h.gch 754. /mnt/share/bld/H-x86-gcc.20071201/include/c++/4.3.0/iostream 755. /mnt/share/bld/H-x86-gcc.20071201include/c++/4.3.0/string 756</programlisting> 757 758<para>The exclamation point to the left of the <code>stdc++.h.gch</code> listing means that the generated PCH file was used.</para> 759<para/> 760 761<para> Detailed information about creating precompiled header files can be found in the GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html">documentation</link>. 762</para> 763 764 </section> 765 </section> 766 767 768 <section xml:id="manual.intro.using.macros" xreflabel="Macros"><info><title>Macros</title></info> 769 <?dbhtml filename="using_macros.html"?> 770 771 772 <para> 773 All library macros begin with <code>_GLIBCXX_</code>. 774 </para> 775 776 <para> 777 Furthermore, all pre-processor macros, switches, and 778 configuration options are gathered in the 779 file <filename class="headerfile">c++config.h</filename>, which 780 is generated during the libstdc++ configuration and build 781 process. This file is then included when needed by files part of 782 the public libstdc++ API, like <ios>. Most of these macros 783 should not be used by consumers of libstdc++, and are reserved 784 for internal implementation use. <emphasis>These macros cannot 785 be redefined</emphasis>. 786 </para> 787 788 <para> 789 A select handful of macros control libstdc++ extensions and extra 790 features, or provide versioning information for the API. Only 791 those macros listed below are offered for consideration by the 792 general public. 793 </para> 794 795 <para>Below is the macro which users may check for library version 796 information. </para> 797 798 <variablelist> 799 <varlistentry> 800 <term><code>__GLIBCXX__</code></term> 801 <listitem> 802 <para>The current version of 803 libstdc++ in compressed ISO date format, form of an unsigned 804 long. For details on the value of this particular macro for a 805 particular release, please consult this <link linkend="appendix.porting.abi"> 806 document</link>. 807 </para> 808 </listitem> 809 </varlistentry> 810 </variablelist> 811 812 <para>Below are the macros which users may change with #define/#undef or 813 with -D/-U compiler flags. The default state of the symbol is 814 listed.</para> 815 816 <para><quote>Configurable</quote> (or <quote>Not configurable</quote>) means 817 that the symbol is initially chosen (or not) based on 818 --enable/--disable options at library build and configure time 819 (documented <link linkend="manual.intro.setup.configure">here</link>), with the 820 various --enable/--disable choices being translated to 821 #define/#undef). 822 </para> 823 824 <para> <acronym>ABI</acronym> means that changing from the default value may 825 mean changing the <acronym>ABI</acronym> of compiled code. In other words, these 826 choices control code which has already been compiled (i.e., in a 827 binary such as libstdc++.a/.so). If you explicitly #define or 828 #undef these macros, the <emphasis>headers</emphasis> may see different code 829 paths, but the <emphasis>libraries</emphasis> which you link against will not. 830 Experimenting with different values with the expectation of 831 consistent linkage requires changing the config headers before 832 building/installing the library. 833 </para> 834 835 <variablelist> 836 <varlistentry><term><code>_GLIBCXX_USE_DEPRECATED</code></term> 837 <listitem> 838 <para> 839 Defined by default. Not configurable. ABI-changing. Turning this off 840 removes older ARM-style iostreams code, and other anachronisms 841 from the API. This macro is dependent on the version of the 842 standard being tracked, and as a result may give different results for 843 <code>-std=c++98</code> and <code>-std=c++11</code>. This may 844 be useful in updating old C++ code which no longer meet the 845 requirements of the language, or for checking current code 846 against new language standards. 847 </para> 848 </listitem></varlistentry> 849 850 <varlistentry><term><code>_GLIBCXX_CONCEPT_CHECKS</code></term> 851 <listitem> 852 <para> 853 Undefined by default. Configurable via 854 <code>--enable-concept-checks</code>. When defined, performs 855 compile-time checking on certain template instantiations to 856 detect violations of the requirements of the standard. This 857 is described in more detail <link linkend="manual.ext.compile_checks">here</link>. 858 </para> 859 </listitem></varlistentry> 860 861 <varlistentry><term><code>_GLIBCXX_DEBUG</code></term> 862 <listitem> 863 <para> 864 Undefined by default. When defined, compiles user code using 865 the <link linkend="manual.ext.debug_mode">debug mode</link>. 866 </para> 867 </listitem></varlistentry> 868 <varlistentry><term><code>_GLIBCXX_DEBUG_PEDANTIC</code></term> 869 <listitem> 870 <para> 871 Undefined by default. When defined while compiling with 872 the <link linkend="manual.ext.debug_mode">debug mode</link>, makes 873 the debug mode extremely picky by making the use of libstdc++ 874 extensions and libstdc++-specific behavior into errors. 875 </para> 876 </listitem></varlistentry> 877 <varlistentry><term><code>_GLIBCXX_PARALLEL</code></term> 878 <listitem> 879 <para>Undefined by default. When defined, compiles user code 880 using the <link linkend="manual.ext.parallel_mode">parallel 881 mode</link>. 882 </para> 883 </listitem></varlistentry> 884 885 <varlistentry><term><code>_GLIBCXX_PROFILE</code></term> 886 <listitem> 887 <para>Undefined by default. When defined, compiles user code 888 using the <link linkend="manual.ext.profile_mode">profile 889 mode</link>. 890 </para> 891 </listitem></varlistentry> 892 </variablelist> 893 894 </section> 895 896 <section xml:id="manual.intro.using.namespaces" xreflabel="Namespaces"><info><title>Namespaces</title></info> 897 <?dbhtml filename="using_namespaces.html"?> 898 899 900 <section xml:id="manual.intro.using.namespaces.all" xreflabel="Available Namespaces"><info><title>Available Namespaces</title></info> 901 902 903 904 905<para> There are three main namespaces. 906</para> 907 908<itemizedlist> 909 <listitem><para>std</para> 910<para>The ISO C++ standards specify that "all library entities are defined 911within namespace std." This includes namespaces nested 912within <code>namespace std</code>, such as <code>namespace 913std::tr1</code>. 914</para> 915</listitem> 916<listitem><para>abi</para> 917<para>Specified by the C++ ABI. This ABI specifies a number of type and 918function APIs supplemental to those required by the ISO C++ Standard, 919but necessary for interoperability. 920</para> 921</listitem> 922 923<listitem><para>__gnu_</para> 924<para>Indicating one of several GNU extensions. Choices 925include <code>__gnu_cxx</code>, <code>__gnu_debug</code>, <code>__gnu_parallel</code>, 926and <code>__gnu_pbds</code>. 927</para></listitem> 928</itemizedlist> 929 930<para> A complete list of implementation namespaces (including namespace contents) is available in the generated source <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html">documentation</link>. 931</para> 932 933 934 </section> 935 936 <section xml:id="manual.intro.using.namespaces.std" xreflabel="namespace std"><info><title>namespace std</title></info> 937 938 939 940<para> 941 One standard requirement is that the library components are defined 942 in <code>namespace std::</code>. Thus, in order to use these types or 943 functions, one must do one of two things: 944</para> 945 946<itemizedlist> 947 <listitem><para>put a kind of <emphasis>using-declaration</emphasis> in your source 948(either <code>using namespace std;</code> or i.e. <code>using 949std::string;</code>) This approach works well for individual source files, but 950should not be used in a global context, like header files. 951 </para></listitem> <listitem><para>use a <emphasis>fully 952qualified name</emphasis> for each library symbol 953(i.e. <code>std::string</code>, <code>std::cout</code>) Always can be 954used, and usually enhanced, by strategic use of typedefs. (In the 955cases where the qualified verbiage becomes unwieldy.) 956 </para> 957 </listitem> 958</itemizedlist> 959 960 </section> 961 962 <section xml:id="manual.intro.using.namespaces.comp" xreflabel="Using Namespace Composition"><info><title>Using Namespace Composition</title></info> 963 964 965<para> 966Best practice in programming suggests sequestering new data or 967functionality in a sanely-named, unique namespace whenever 968possible. This is considered an advantage over dumping everything in 969the global namespace, as then name look-up can be explicitly enabled or 970disabled as above, symbols are consistently mangled without repetitive 971naming prefixes or macros, etc. 972</para> 973 974<para>For instance, consider a project that defines most of its classes in <code>namespace gtk</code>. It is possible to 975 adapt <code>namespace gtk</code> to <code>namespace std</code> by using a C++-feature called 976 <emphasis>namespace composition</emphasis>. This is what happens if 977 a <emphasis>using</emphasis>-declaration is put into a 978 namespace-definition: the imported symbol(s) gets imported into the 979 currently active namespace(s). For example: 980</para> 981<programlisting> 982namespace gtk 983{ 984 using std::string; 985 using std::tr1::array; 986 987 class Window { ... }; 988} 989</programlisting> 990<para> 991 In this example, <code>std::string</code> gets imported into 992 <code>namespace gtk</code>. The result is that use of 993 <code>std::string</code> inside namespace gtk can just use <code>string</code>, without the explicit qualification. 994 As an added bonus, 995 <code>std::string</code> does not get imported into 996 the global namespace. Additionally, a more elaborate arrangement can be made for backwards compatibility and portability, whereby the 997 <code>using</code>-declarations can wrapped in macros that 998 are set based on autoconf-tests to either "" or i.e. <code>using 999 std::string;</code> (depending on whether the system has 1000 libstdc++ in <code>std::</code> or not). (ideas from 1001 Llewelly and Karl Nelson) 1002</para> 1003 1004 1005 </section> 1006 </section> 1007 1008 <section xml:id="manual.intro.using.linkage" xreflabel="Linkage"><info><title>Linking</title></info> 1009 <?dbhtml filename="using_dynamic_or_shared.html"?> 1010 1011 1012 <section xml:id="manual.intro.using.linkage.freestanding" xreflabel="Freestanding"><info><title>Almost Nothing</title></info> 1013 1014 <para> 1015 Or as close as it gets: freestanding. This is a minimal 1016 configuration, with only partial support for the standard 1017 library. Assume only the following header files can be used: 1018 </para> 1019 1020 <itemizedlist> 1021 <listitem> 1022 <para> 1023 <filename class="headerfile">cstdarg</filename> 1024 </para> 1025 </listitem> 1026 1027 <listitem> 1028 <para> 1029 <filename class="headerfile">cstddef</filename> 1030 </para> 1031 </listitem> 1032 1033 <listitem> 1034 <para> 1035 <filename class="headerfile">cstdlib</filename> 1036 </para> 1037 </listitem> 1038 1039 <listitem> 1040 <para> 1041 <filename class="headerfile">exception</filename> 1042 </para> 1043 </listitem> 1044 1045 <listitem> 1046 <para> 1047 <filename class="headerfile">limits</filename> 1048 </para> 1049 </listitem> 1050 1051 <listitem> 1052 <para> 1053 <filename class="headerfile">new</filename> 1054 </para> 1055 </listitem> 1056 1057 <listitem> 1058 <para> 1059 <filename class="headerfile">exception</filename> 1060 </para> 1061 </listitem> 1062 1063 <listitem> 1064 <para> 1065 <filename class="headerfile">typeinfo</filename> 1066 </para> 1067 </listitem> 1068 </itemizedlist> 1069 1070 <para> 1071 In addition, throw in 1072 </para> 1073 1074 <itemizedlist> 1075 <listitem> 1076 <para> 1077 <filename class="headerfile">cxxabi.h</filename>. 1078 </para> 1079 </listitem> 1080 </itemizedlist> 1081 1082 <para> 1083 In the 1084 C++11 <link linkend="manual.intro.using.flags">dialect</link> add 1085 </para> 1086 1087 <itemizedlist> 1088 <listitem> 1089 <para> 1090 <filename class="headerfile">initializer_list</filename> 1091 </para> 1092 </listitem> 1093 <listitem> 1094 <para> 1095 <filename class="headerfile">type_traits</filename> 1096 </para> 1097 </listitem> 1098 </itemizedlist> 1099 1100 <para> There exists a library that offers runtime support for 1101 just these headers, and it is called 1102 <filename class="libraryfile">libsupc++.a</filename>. To use it, compile with <command>gcc</command> instead of <command>g++</command>, like so: 1103 </para> 1104 1105 <para> 1106 <command>gcc foo.cc -lsupc++</command> 1107 </para> 1108 1109 <para> 1110 No attempt is made to verify that only the minimal subset 1111 identified above is actually used at compile time. Violations 1112 are diagnosed as undefined symbols at link time. 1113 </para> 1114 </section> 1115 1116 <section xml:id="manual.intro.using.linkage.dynamic" xreflabel="Dynamic and Shared"><info><title>Finding Dynamic or Shared Libraries</title></info> 1117 1118 1119 <para> 1120 If the only library built is the static library 1121 (<filename class="libraryfile">libstdc++.a</filename>), or if 1122 specifying static linking, this section is can be skipped. But 1123 if building or using a shared library 1124 (<filename class="libraryfile">libstdc++.so</filename>), then 1125 additional location information will need to be provided. 1126 </para> 1127 <para> 1128 But how? 1129 </para> 1130 <para> 1131A quick read of the relevant part of the GCC 1132 manual, <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b">Compiling 1133 C++ Programs</link>, specifies linking against a C++ 1134 library. More details from the 1135 GCC <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/faq.html#rpath">FAQ</link>, 1136 which states <emphasis>GCC does not, by default, specify a 1137 location so that the dynamic linker can find dynamic libraries at 1138 runtime.</emphasis> 1139 </para> 1140 <para> 1141 Users will have to provide this information. 1142 </para> 1143 <para> 1144 Methods vary for different platforms and different styles, and 1145 are printed to the screen during installation. To summarize: 1146 </para> 1147 <itemizedlist> 1148 <listitem> 1149 <para> 1150 At runtime set <literal>LD_LIBRARY_PATH</literal> in your 1151 environment correctly, so that the shared library for 1152 libstdc++ can be found and loaded. Be certain that you 1153 understand all of the other implications and behavior 1154 of <literal>LD_LIBRARY_PATH</literal> first. 1155 </para> 1156 1157 </listitem> 1158 <listitem> 1159 <para> 1160 Compile the path to find the library at runtime into the 1161 program. This can be done by passing certain options to 1162 <command>g++</command>, which will in turn pass them on to 1163 the linker. The exact format of the options is dependent on 1164 which linker you use: 1165 </para> 1166 <itemizedlist> 1167 <listitem> 1168 <para> 1169 GNU ld (default on GNU/Linux): 1170 <literal>-Wl,-rpath,</literal><filename class="directory">destdir/lib</filename> 1171 </para> 1172 </listitem> 1173 <listitem> 1174 <para> 1175 Solaris ld: 1176 <literal>-Wl,-R</literal><filename class="directory">destdir/lib</filename> 1177 </para> 1178 </listitem> 1179 </itemizedlist> 1180 </listitem> 1181 <listitem> 1182 <para> 1183 Some linkers allow you to specify the path to the library by 1184 setting <literal>LD_RUN_PATH</literal> in your environment 1185 when linking. 1186 </para> 1187 </listitem> 1188 <listitem> 1189 <para> 1190 On some platforms the system administrator can configure the 1191 dynamic linker to always look for libraries in 1192 <filename class="directory">destdir/lib</filename>, for example 1193 by using the <command>ldconfig</command> utility on GNU/Linux 1194 or the <command>crle</command> utility on Solaris. This is a 1195 system-wide change which can make the system unusable so if you 1196 are unsure then use one of the other methods described above. 1197 </para> 1198 </listitem> 1199 </itemizedlist> 1200 <para> 1201 Use the <command>ldd</command> utility on the linked executable 1202 to show 1203 which <filename class="libraryfile">libstdc++.so</filename> 1204 library the system will get at runtime. 1205 </para> 1206 <para> 1207 A <filename class="libraryfile">libstdc++.la</filename> file is 1208 also installed, for use with Libtool. If you use Libtool to 1209 create your executables, these details are taken care of for 1210 you. 1211 </para> 1212 </section> 1213 </section> 1214 1215 1216 <section xml:id="manual.intro.using.concurrency" xreflabel="Concurrency"><info><title>Concurrency</title></info> 1217 <?dbhtml filename="using_concurrency.html"?> 1218 1219 1220 <para>This section discusses issues surrounding the proper compilation 1221 of multithreaded applications which use the Standard C++ 1222 library. This information is GCC-specific since the C++ 1223 standard does not address matters of multithreaded applications. 1224 </para> 1225 1226 <section xml:id="manual.intro.using.concurrency.prereq" xreflabel="Thread Prereq"><info><title>Prerequisites</title></info> 1227 1228 1229 <para>All normal disclaimers aside, multithreaded C++ application are 1230 only supported when libstdc++ and all user code was built with 1231 compilers which report (via <code> gcc/g++ -v </code>) the same thread 1232 model and that model is not <emphasis>single</emphasis>. As long as your 1233 final application is actually single-threaded, then it should be 1234 safe to mix user code built with a thread model of 1235 <emphasis>single</emphasis> with a libstdc++ and other C++ libraries built 1236 with another thread model useful on the platform. Other mixes 1237 may or may not work but are not considered supported. (Thus, if 1238 you distribute a shared C++ library in binary form only, it may 1239 be best to compile it with a GCC configured with 1240 --enable-threads for maximal interchangeability and usefulness 1241 with a user population that may have built GCC with either 1242 --enable-threads or --disable-threads.) 1243 </para> 1244 <para>When you link a multithreaded application, you will probably 1245 need to add a library or flag to g++. This is a very 1246 non-standardized area of GCC across ports. Some ports support a 1247 special flag (the spelling isn't even standardized yet) to add 1248 all required macros to a compilation (if any such flags are 1249 required then you must provide the flag for all compilations not 1250 just linking) and link-library additions and/or replacements at 1251 link time. The documentation is weak. Here is a quick summary 1252 to display how ad hoc this is: On Solaris, both -pthreads and 1253 -threads (with subtly different meanings) are honored. 1254 On GNU/Linux x86, -pthread is honored. On FreeBSD, 1255 -pthread is honored. Some other ports use other switches. 1256 AFAIK, none of this is properly documented anywhere other than 1257 in ``gcc -dumpspecs'' (look at lib and cpp entries). 1258 </para> 1259 1260 </section> 1261 1262 <section xml:id="manual.intro.using.concurrency.thread_safety" xreflabel="Thread Safety"><info><title>Thread Safety</title></info> 1263 1264 1265<para> 1266In the terms of the 2011 C++ standard a thread-safe program is one which 1267does not perform any conflicting non-atomic operations on memory locations 1268and so does not contain any data races. 1269The standard places requirements on the library to ensure that no data 1270races are caused by the library itself or by programs which use the 1271library correctly (as described below). 1272The C++11 memory model and library requirements are a more formal version 1273of the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</link> definition of thread safety, which the library used 1274prior to the 2011 standard. 1275</para> 1276 1277 1278 <para>The library strives to be thread-safe when all of the following 1279 conditions are met: 1280 </para> 1281 <itemizedlist> 1282 <listitem> 1283 <para>The system's libc is itself thread-safe, 1284 </para> 1285 </listitem> 1286 <listitem> 1287 <para> 1288 The compiler in use reports a thread model other than 1289 'single'. This can be tested via output from <code>gcc 1290 -v</code>. Multi-thread capable versions of gcc output 1291 something like this: 1292 </para> 1293<programlisting> 1294%gcc -v 1295Using built-in specs. 1296... 1297Thread model: posix 1298gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) 1299</programlisting> 1300 1301<para>Look for "Thread model" lines that aren't equal to "single."</para> 1302 </listitem> 1303 <listitem> 1304 <para> 1305 Requisite command-line flags are used for atomic operations 1306 and threading. Examples of this include <code>-pthread</code> 1307 and <code>-march=native</code>, although specifics vary 1308 depending on the host environment. See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html">Machine 1309 Dependent Options</link>. 1310 </para> 1311 </listitem> 1312 <listitem> 1313 <para> 1314 An implementation of atomicity.h functions 1315 exists for the architecture in question. See the internals documentation for more <link linkend="internals.thread_safety">details</link>. 1316 </para> 1317 </listitem> 1318 1319 </itemizedlist> 1320 1321 <para>The user code must guard against concurrent function calls which 1322 access any particular library object's state when one or more of 1323 those accesses modifies the state. An object will be modified by 1324 invoking a non-const member function on it or passing it as a 1325 non-const argument to a library function. An object will not be 1326 modified by invoking a const member function on it or passing it to 1327 a function as a pointer- or reference-to-const. 1328 Typically, the application 1329 programmer may infer what object locks must be held based on the 1330 objects referenced in a function call and whether the objects are 1331 accessed as const or non-const. Without getting 1332 into great detail, here is an example which requires user-level 1333 locks: 1334 </para> 1335 <programlisting> 1336 library_class_a shared_object_a; 1337 1338 void thread_main () { 1339 library_class_b *object_b = new library_class_b; 1340 shared_object_a.add_b (object_b); // must hold lock for shared_object_a 1341 shared_object_a.mutate (); // must hold lock for shared_object_a 1342 } 1343 1344 // Multiple copies of thread_main() are started in independent threads.</programlisting> 1345 <para>Under the assumption that object_a and object_b are never exposed to 1346 another thread, here is an example that does not require any 1347 user-level locks: 1348 </para> 1349 <programlisting> 1350 void thread_main () { 1351 library_class_a object_a; 1352 library_class_b *object_b = new library_class_b; 1353 object_a.add_b (object_b); 1354 object_a.mutate (); 1355 } </programlisting> 1356 1357 <para>All library types are safe to use in a multithreaded program 1358 if objects are not shared between threads or as 1359 long each thread carefully locks out access by any other 1360 thread while it modifies any object visible to another thread. 1361 Unless otherwise documented, the only exceptions to these rules 1362 are atomic operations on the types in 1363 <filename class="headerfile"><atomic></filename> 1364 and lock/unlock operations on the standard mutex types in 1365 <filename class="headerfile"><mutex></filename>. These 1366 atomic operations allow concurrent accesses to the same object 1367 without introducing data races. 1368 </para> 1369 1370 <para>The following member functions of standard containers can be 1371 considered to be const for the purposes of avoiding data races: 1372 <code>begin</code>, <code>end</code>, <code>rbegin</code>, <code>rend</code>, 1373 <code>front</code>, <code>back</code>, <code>data</code>, 1374 <code>find</code>, <code>lower_bound</code>, <code>upper_bound</code>, 1375 <code>equal_range</code>, <code>at</code> 1376 and, except in associative or unordered associative containers, 1377 <code>operator[]</code>. In other words, although they are non-const 1378 so that they can return mutable iterators, those member functions 1379 will not modify the container. 1380 Accessing an iterator might cause a non-modifying access to 1381 the container the iterator refers to (for example incrementing a 1382 list iterator must access the pointers between nodes, which are part 1383 of the container and so conflict with other accesses to the container). 1384 </para> 1385 1386 <para>Programs which follow the rules above will not encounter data 1387 races in library code, even when using library types which share 1388 state between distinct objects. In the example below the 1389 <code>shared_ptr</code> objects share a reference count, but 1390 because the code does not perform any non-const operations on the 1391 globally-visible object, the library ensures that the reference 1392 count updates are atomic and do not introduce data races: 1393 </para> 1394 <programlisting> 1395 std::shared_ptr<int> global_sp; 1396 1397 void thread_main() { 1398 auto local_sp = global_sp; // OK, copy constructor's parameter is reference-to-const 1399 1400 int i = *global_sp; // OK, operator* is const 1401 int j = *local_sp; // OK, does not operate on global_sp 1402 1403 // *global_sp = 2; // NOT OK, modifies int visible to other threads 1404 // *local_sp = 2; // NOT OK, modifies int visible to other threads 1405 1406 // global_sp.reset(); // NOT OK, reset is non-const 1407 local_sp.reset(); // OK, does not operate on global_sp 1408 } 1409 1410 int main() { 1411 global_sp.reset(new int(1)); 1412 std::thread t1(thread_main); 1413 std::thread t2(thread_main); 1414 t1.join(); 1415 t2.join(); 1416 } 1417 </programlisting> 1418 1419 <para>For further details of the C++11 memory model see Hans-J. Boehm's 1420 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/user-faq.html">Threads 1421 and memory model for C++</link> pages, particularly the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/threadsintro.html">introduction</link> 1422 and <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/user-faq.html">FAQ</link>. 1423 </para> 1424 1425 </section> 1426 <section xml:id="manual.intro.using.concurrency.atomics" xreflabel="Atomics"><info><title>Atomics</title></info> 1427 1428 <para> 1429 </para> 1430 </section> 1431 1432 <section xml:id="manual.intro.using.concurrency.io" xreflabel="IO"><info><title>IO</title></info> 1433 1434 <para>This gets a bit tricky. Please read carefully, and bear with me. 1435 </para> 1436 1437 <section xml:id="concurrency.io.structure" xreflabel="Structure"><info><title>Structure</title></info> 1438 1439 <para>A wrapper 1440 type called <code>__basic_file</code> provides our abstraction layer 1441 for the <code>std::filebuf</code> classes. Nearly all decisions dealing 1442 with actual input and output must be made in <code>__basic_file</code>. 1443 </para> 1444 <para>A generic locking mechanism is somewhat in place at the filebuf layer, 1445 but is not used in the current code. Providing locking at any higher 1446 level is akin to providing locking within containers, and is not done 1447 for the same reasons (see the links above). 1448 </para> 1449 </section> 1450 1451 <section xml:id="concurrency.io.defaults" xreflabel="Defaults"><info><title>Defaults</title></info> 1452 1453 <para>The __basic_file type is simply a collection of small wrappers around 1454 the C stdio layer (again, see the link under Structure). We do no 1455 locking ourselves, but simply pass through to calls to <code>fopen</code>, 1456 <code>fwrite</code>, and so forth. 1457 </para> 1458 <para>So, for 3.0, the question of "is multithreading safe for I/O" 1459 must be answered with, "is your platform's C library threadsafe 1460 for I/O?" Some are by default, some are not; many offer multiple 1461 implementations of the C library with varying tradeoffs of threadsafety 1462 and efficiency. You, the programmer, are always required to take care 1463 with multiple threads. 1464 </para> 1465 <para>(As an example, the POSIX standard requires that C stdio FILE* 1466 operations are atomic. POSIX-conforming C libraries (e.g, on Solaris 1467 and GNU/Linux) have an internal mutex to serialize operations on 1468 FILE*s. However, you still need to not do stupid things like calling 1469 <code>fclose(fs)</code> in one thread followed by an access of 1470 <code>fs</code> in another.) 1471 </para> 1472 <para>So, if your platform's C library is threadsafe, then your 1473 <code>fstream</code> I/O operations will be threadsafe at the lowest 1474 level. For higher-level operations, such as manipulating the data 1475 contained in the stream formatting classes (e.g., setting up callbacks 1476 inside an <code>std::ofstream</code>), you need to guard such accesses 1477 like any other critical shared resource. 1478 </para> 1479 </section> 1480 1481 <section xml:id="concurrency.io.future" xreflabel="Future"><info><title>Future</title></info> 1482 1483 <para> A 1484 second choice may be available for I/O implementations: libio. This is 1485 disabled by default, and in fact will not currently work due to other 1486 issues. It will be revisited, however. 1487 </para> 1488 <para>The libio code is a subset of the guts of the GNU libc (glibc) I/O 1489 implementation. When libio is in use, the <code>__basic_file</code> 1490 type is basically derived from FILE. (The real situation is more 1491 complex than that... it's derived from an internal type used to 1492 implement FILE. See libio/libioP.h to see scary things done with 1493 vtbls.) The result is that there is no "layer" of C stdio 1494 to go through; the filebuf makes calls directly into the same 1495 functions used to implement <code>fread</code>, <code>fwrite</code>, 1496 and so forth, using internal data structures. (And when I say 1497 "makes calls directly," I mean the function is literally 1498 replaced by a jump into an internal function. Fast but frightening. 1499 *grin*) 1500 </para> 1501 <para>Also, the libio internal locks are used. This requires pulling in 1502 large chunks of glibc, such as a pthreads implementation, and is one 1503 of the issues preventing widespread use of libio as the libstdc++ 1504 cstdio implementation. 1505 </para> 1506 <para>But we plan to make this work, at least as an option if not a future 1507 default. Platforms running a copy of glibc with a recent-enough 1508 version will see calls from libstdc++ directly into the glibc already 1509 installed. For other platforms, a copy of the libio subsection will 1510 be built and included in libstdc++. 1511 </para> 1512 </section> 1513 1514 <section xml:id="concurrency.io.alt" xreflabel="Alt"><info><title>Alternatives</title></info> 1515 1516 <para>Don't forget that other cstdio implementations are possible. You could 1517 easily write one to perform your own forms of locking, to solve your 1518 "interesting" problems. 1519 </para> 1520 </section> 1521 1522 </section> 1523 1524 <section xml:id="manual.intro.using.concurrency.containers" xreflabel="Containers"><info><title>Containers</title></info> 1525 1526 1527 <para>This section discusses issues surrounding the design of 1528 multithreaded applications which use Standard C++ containers. 1529 All information in this section is current as of the gcc 3.0 1530 release and all later point releases. Although earlier gcc 1531 releases had a different approach to threading configuration and 1532 proper compilation, the basic code design rules presented here 1533 were similar. For information on all other aspects of 1534 multithreading as it relates to libstdc++, including details on 1535 the proper compilation of threaded code (and compatibility between 1536 threaded and non-threaded code), see Chapter 17. 1537 </para> 1538 <para>Two excellent pages to read when working with the Standard C++ 1539 containers and threads are 1540 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/thread_safety.html">SGI's 1541 http://www.sgi.com/tech/stl/thread_safety.html</link> and 1542 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.sgi.com/tech/stl/Allocators.html">SGI's 1543 http://www.sgi.com/tech/stl/Allocators.html</link>. 1544 </para> 1545 <para><emphasis>However, please ignore all discussions about the user-level 1546 configuration of the lock implementation inside the STL 1547 container-memory allocator on those pages. For the sake of this 1548 discussion, libstdc++ configures the SGI STL implementation, 1549 not you. This is quite different from how gcc pre-3.0 worked. 1550 In particular, past advice was for people using g++ to 1551 explicitly define _PTHREADS or other macros or port-specific 1552 compilation options on the command line to get a thread-safe 1553 STL. This is no longer required for any port and should no 1554 longer be done unless you really know what you are doing and 1555 assume all responsibility.</emphasis> 1556 </para> 1557 <para>Since the container implementation of libstdc++ uses the SGI 1558 code, we use the same definition of thread safety as SGI when 1559 discussing design. A key point that beginners may miss is the 1560 fourth major paragraph of the first page mentioned above 1561 (<emphasis>For most clients...</emphasis>), which points out that 1562 locking must nearly always be done outside the container, by 1563 client code (that'd be you, not us). There is a notable 1564 exceptions to this rule. Allocators called while a container or 1565 element is constructed uses an internal lock obtained and 1566 released solely within libstdc++ code (in fact, this is the 1567 reason STL requires any knowledge of the thread configuration). 1568 </para> 1569 <para>For implementing a container which does its own locking, it is 1570 trivial to provide a wrapper class which obtains the lock (as 1571 SGI suggests), performs the container operation, and then 1572 releases the lock. This could be templatized <emphasis>to a certain 1573 extent</emphasis>, on the underlying container and/or a locking 1574 mechanism. Trying to provide a catch-all general template 1575 solution would probably be more trouble than it's worth. 1576 </para> 1577 <para>The library implementation may be configured to use the 1578 high-speed caching memory allocator, which complicates thread 1579 safety issues. For all details about how to globally override 1580 this at application run-time 1581 see <link linkend="manual.intro.using.macros">here</link>. Also 1582 useful are details 1583 on <link linkend="std.util.memory.allocator">allocator</link> 1584 options and capabilities. 1585 </para> 1586 1587 </section> 1588</section> 1589 1590<!-- Section 0x : Exception policies, expectations, topics --> 1591<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="using_exceptions.xml"> 1592</xi:include> 1593 1594<!-- Section 0x : Debug --> 1595<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="debug.xml"> 1596</xi:include> 1597 1598</chapter> 1599