xref: /netbsd-src/external/gpl3/gcc/dist/libstdc++-v3/doc/xml/manual/using.xml (revision 946379e7b37692fc43f68eb0d1c10daa0a7f3b6c)
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 &lt;thread&gt;, &lt;future&gt;,
68      &lt;mutex&gt;, or &lt;condition_variable&gt;.</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 &lt;array&gt;
631#include &lt;functional&gt;
632</programlisting>
633
634<para>Implies C++11 mode. To use the entities in &lt;array&gt;, the C++11
635compilation mode must be used, which implies the C++11 functionality
636(and deprecations) in &lt;functional&gt; 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 &lt;tr1/type_traits&gt;
655#include &lt;type_traits&gt;
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	(&lt;math.h&gt; 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 (&lt;cmath&gt;) 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 &lt;cmath&gt;, 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 &lt;stdc++.h&gt;, and adds all the TR1 headers.
710</para>
711</listitem>
712
713<listitem><para>extc++.h</para>
714<para>Includes all of &lt;stdtr1c++.h&gt;, 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 &lt;...&gt; 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 &lt;ios&gt;. 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">&lt;atomic&gt;</filename>
1364         and lock/unlock operations on the standard mutex types in
1365         <filename class="headerfile">&lt;mutex&gt;</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&lt;int&gt; 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