Fix timevar.cc build on systems that don't have CLOCK_MONOTONIC
[gcc.git] / libstdc++-v3 / doc / xml / manual / support.xml
blobf4b41664f6018d98a8f9017706569d55d1bd981a
1 <chapter xmlns="http://docbook.org/ns/docbook" version="5.0"
2          xml:id="std.support" xreflabel="Support">
3 <?dbhtml filename="support.html"?>
5 <info><title>
6   Support
7   <indexterm><primary>Support</primary></indexterm>
8 </title>
9   <keywordset>
10     <keyword>ISO C++</keyword>
11     <keyword>library</keyword>
12   </keywordset>
13 </info>
15   <para>
16     This part deals with the functions called and objects created
17     automatically during the course of a program's existence.
18   </para>
20   <para>
21     While we can't reproduce the contents of the Standard here (you
22     need to get your own copy from your nation's member body; see our
23     homepage for help), we can mention a couple of changes in what
24     kind of support a C++ program gets from the Standard Library.
25   </para>
27 <section xml:id="std.support.types" xreflabel="Types"><info><title>Types</title></info>
28   <?dbhtml filename="fundamental_types.html"?>
30   <section xml:id="std.support.types.fundamental" xreflabel="Fundamental Types"><info><title>Fundamental Types</title></info>
32     <para>
33       C++ has the following builtin types:
34     </para>
35     <itemizedlist>
36       <listitem><para>
37         char
38       </para></listitem>
39       <listitem><para>
40         signed char
41       </para></listitem>
42       <listitem><para>
43         unsigned char
44       </para></listitem>
45       <listitem><para>
46         signed short
47       </para></listitem>
48       <listitem><para>
49         signed int
50       </para></listitem>
51       <listitem><para>
52         signed long
53       </para></listitem>
54       <listitem><para>
55         unsigned short
56       </para></listitem>
57       <listitem><para>
58         unsigned int
59       </para></listitem>
60       <listitem><para>
61         unsigned long
62       </para></listitem>
63       <listitem><para>
64         bool
65       </para></listitem>
66       <listitem><para>
67         wchar_t
68       </para></listitem>
69       <listitem><para>
70         float
71       </para></listitem>
72       <listitem><para>
73         double
74       </para></listitem>
75       <listitem><para>
76         long double
77       </para></listitem>
78     </itemizedlist>
80     <para>
81       These fundamental types are always available, without having to
82       include a header file. These types are exactly the same in
83       either C++ or in C.
84     </para>
86     <para>
87       Specializing parts of the library on these types is prohibited:
88       instead, use a POD.
89     </para>
91   </section>
92   <section xml:id="std.support.types.numeric_limits" xreflabel="Numeric Properties"><info><title>Numeric Properties</title></info>
94     <para>
95     The header <filename class="headerfile">&lt;limits&gt;</filename> defines
96     traits classes to give access to various implementation
97     defined-aspects of the fundamental types. The traits classes --
98     fourteen in total -- are all specializations of the class template
99     <classname>numeric_limits</classname>
100     and defined as follows:
101     </para>
103    <programlisting>
104    template&lt;typename T&gt;
105      struct class
106      {
107        static const bool is_specialized;
108        static T max() throw();
109        static T min() throw();
111        static const int digits;
112        static const int digits10;
113        static const bool is_signed;
114        static const bool is_integer;
115        static const bool is_exact;
116        static const int radix;
117        static T epsilon() throw();
118        static T round_error() throw();
120        static const int min_exponent;
121        static const int min_exponent10;
122        static const int max_exponent;
123        static const int max_exponent10;
125        static const bool has_infinity;
126        static const bool has_quiet_NaN;
127        static const bool has_signaling_NaN;
128        static const float_denorm_style has_denorm;
129        static const bool has_denorm_loss;
130        static T infinity() throw();
131        static T quiet_NaN() throw();
132        static T denorm_min() throw();
134        static const bool is_iec559;
135        static const bool is_bounded;
136        static const bool is_modulo;
138        static const bool traps;
139        static const bool tinyness_before;
140        static const float_round_style round_style;
141      };
142    </programlisting>
143   </section>
145   <section xml:id="std.support.types.null" xreflabel="NULL"><info><title>NULL</title></info>
147     <para>
148      The only change that might affect people is the type of
149      <constant>NULL</constant>: while it is required to be a macro,
150      the definition of that macro is <emphasis>not</emphasis> allowed
151      to be an expression with pointer type such as
152      <constant>(void*)0</constant>, which is often used in C.
153     </para>
155     <para>
156      For <command>g++</command>, <constant>NULL</constant> is
157      <code>#define</code>'d to be
158      <constant>__null</constant>, a magic keyword extension of
159      <command>g++</command> that is slightly safer than a plain integer.
160     </para>
162     <para>
163      The biggest problem of #defining <constant>NULL</constant> to be
164      something like <quote>0L</quote> is that the compiler will view
165      that as a long integer before it views it as a pointer, so
166      overloading won't do what you expect. It might not even have the
167      same size as a pointer, so passing <constant>NULL</constant> to a
168      varargs function where a pointer is expected might not even work
169      correctly if <code>sizeof(NULL) &lt; sizeof(void*)</code>.
170      The G++ <constant>__null</constant> extension is defined so that
171      <code>sizeof(__null) == sizeof(void*)</code> to avoid this problem.
172     </para>
174     <para>
175      Scott Meyers explains this in more detail in his book
176      <link xmlns:xlink="http://www.w3.org/1999/xlink"
177       xlink:href="https://www.aristeia.com/books.html"><emphasis>Effective
178      Modern C++</emphasis></link> and as a guideline to solve this problem
179      recommends to not overload on pointer-vs-integer types to begin with.
180     </para>
182     <para>
183      The C++ 2011 standard added the <constant>nullptr</constant> keyword,
184      which is a null pointer constant of a special type,
185      <classname>std::nullptr_t</classname>. Values of this type can be
186      implicitly converted to <emphasis>any</emphasis> pointer type,
187      and cannot convert to integer types or be deduced as an integer type.
188      Unless you need to be compatible with C++98/C++03 or C you should prefer
189      to use <constant>nullptr</constant>  instead of <constant>NULL</constant>.
190     </para>
191   </section>
193 </section>
195 <section xml:id="std.support.memory" xreflabel="Dynamic Memory"><info><title>Dynamic Memory</title></info>
196   <?dbhtml filename="dynamic_memory.html"?>
198   <para>
199     In C++98 there are six flavors each of <function>operator new</function>
200     and <function>operator delete</function>, so make certain that you're
201     using the right ones.
202     Here are quickie descriptions of <function>operator new</function>:
203   </para>
204   <variablelist>
205     <varlistentry>
206       <term><code>void* operator new(std::size_t);</code></term>
207       <listitem>
208         Single object form.
209         Throws <classname>std::bad_alloc</classname> on error.
210         This is what most people are used to using.
211       </listitem>
212     </varlistentry>
213     <varlistentry>
214       <term><code>void* operator new(std::size_t, std::nothrow_t) noexcept;</code></term>
215       <listitem>
216         Single object <quote>nothrow</quote> form.
217         Calls <code>operator new(std::size_t)</code> but if that throws,
218         returns a null pointer instead.
219       </listitem>
220     </varlistentry>
221     <varlistentry>
222       <term><code>void* operator new[](std::size_t);</code></term>
223       <listitem>
224         Array <function>new</function>.
225         Calls <code>operator new(std::size_t)</code> and so
226         throws <classname>std::bad_alloc</classname> on error.
227       </listitem>
228     </varlistentry>
229     <varlistentry>
230       <term><code>void* operator new[](std::size_t, std::nothrow_t) noexcept;</code></term>
231       <listitem>
232         Array <quote>nothrow</quote> <function>new</function>.
233         Calls <code>operator new[](std::size_t)</code> but if that throws,
234         returns a null pointer instead.
235       </listitem>
236     </varlistentry>
237     <varlistentry>
238       <term><code>void* operator new(std::size_t, void*) noexcept;</code></term>
239       <listitem>
240         Non-allocating, <quote>placement</quote> single-object <function>new</function>,
241         which does nothing except return its argument.
242         This function cannot be replaced.
243       </listitem>
244     </varlistentry>
245     <varlistentry>
246       <term><code>void* operator new[](std::size_t, void*) noexcept;</code></term>
247       <listitem>
248         Non-allocating, <quote>placement</quote> array <function>new</function>,
249         which also does nothing except return its argument.
250         This function cannot be replaced.
251       </listitem>
252     </varlistentry>
253    </variablelist>
254    <para>
255      They are distinguished by the arguments that you pass to them, like
256      any other overloaded function.  The six flavors of
257      <function>operator delete</function>
258      are distinguished the same way, but none of them are allowed to throw
259      an exception under any circumstances anyhow.  (The overloads match up
260      with the ones above, for completeness' sake.)
261    </para>
262    <para>
263      The C++ 2014 revision of the standard added two additional overloads of
264      <function>operator delete</function> for <quote>sized deallocation</quote>,
265      allowing the compiler to provide the size of the storage being freed.
266    </para>
267    <para>
268      The C++ 2017 standard added even more overloads of both
269      <function>operator new</function> and <function>operator delete</function>
270      for allocating and deallocating storage for overaligned types.
271      These overloads correspond to each of the allocating forms of
272      <function>operator new</function> and <function>operator delete</function>
273      but with an additional parameter of type <type>std::align_val_t</type>.
274      These new overloads are not interchangeable with the versions without
275      an aligment parameter, so if memory was allocated by an overload of
276      <function>operator new</function> taking an alignment parameter,
277      then it must be decallocated by the corresponding overload of
278      <function>operator delete</function> that takes an alignment parameter.
279    </para>
280    <para>
281      Apart from the non-allocating forms, the default versions of the array
282      and nothrow <function>operator new</function> functions will all result
283      in a call to either <function>operator new(std::size_t)</function> or
284      <function>operator new(std::size_t, std::align_val_t)</function>,
285      and similarly the default versions of the array and nothrow
286      <function>operator delete</function> functions will result in a call to
287      either <function>operator delete(void*)</function> or
288      <function>operator delete(void*, std::align_val_t)</function>
289      (or the sized versions of those).
290    </para>
291    <para>
292      Apart from the non-allocating forms, any of these functions can be
293      replaced by defining a function with the same signature in your program.
294      Replacement versions must preserve certain guarantees, such as memory
295      obtained from a nothrow <function>operator new</function> being free-able
296      by the normal (non-nothrow) <function>operator delete</function>,
297      and the sized and unsized forms of <function>operator delete</function>
298      being interchangeable (because it's unspecified whether
299      the compiler calls the sized delete instead of the normal one).
300      The simplest way to meet the guarantees is to only replace the ordinary
301      <function>operator new(size_t)</function> and
302      <function>operator delete(void*)</function> and
303      <function>operator delete(void*, std::size_t)</function>
304      functions, and the replaced versions will be used by all of
305      <function>operator new(size_t, nothrow_t)</function>,
306      <function>operator new[](size_t)</function> and
307      <function>operator new[](size_t, nothrow_t)</function>
308      and the corresponding <function>operator delete</function> functions.
309      To support types with extended alignment you may also need to replace
310      <function>operator new(size_t, align_val_t)</function> and
311      <function>operator delete(void*, align_val_t)</function>
312      <function>operator delete(void*, size_t, align_val_t)</function>
313      (which will then be used by the nothrow and array forms for
314      extended alignments).
315      If you do need to replace other forms (e.g. to define the nothrow
316      <function>operator new</function> to allocate memory directly, so it
317      works with exceptions disabled) then make sure the memory it allocates
318      can still be freed by the non-nothrow forms of
319      <function>operator delete</function>.
320    </para>
321    <para>
322      If the default versions of <function>operator new(std::size_t)</function>
323      and <function>operator new(size_t, std::align_val_t)</function>
324      can't allocate the memory requested, they usually throw an exception
325      object of type <classname>std::bad_alloc</classname> (or some class
326      derived from that). However, the program can influence that behavior
327      by registering a <quote>new-handler</quote>, because what
328      <function>operator new</function> actually does is something like:
329    </para>
330    <programlisting>
331     while (true)
332     {
333       if (void* p = /* try to allocate memory */)
334         return p;
335       else if (std::new_handler h = std::get_new_handler ())
336         h ();
337       else
338         throw bad_alloc{};
339     }
340    </programlisting>
341    <para>
342      This means you can influence what happens on allocation failure by
343      writing your own new-handler and then registering it with
344      <function>std::set_new_handler</function>:
345    </para>
346    <programlisting>
347    typedef void (*PFV)();
349    static char*  safety;
350    static PFV    old_handler;
352    void my_new_handler ()
353    {
354        delete[] safety;
355        safety = nullptr;
356        popup_window ("Dude, you are running low on heap memory.  You"
357                      " should, like, close some windows, or something."
358                      " The next time you run out, we're gonna burn!");
359        set_new_handler (old_handler);
360        return;
361    }
363    int main ()
364    {
365        safety = new char[500000];
366        old_handler = set_new_handler (&amp;my_new_handler);
367        ...
368    }
369    </programlisting>
371    <section xml:id="std.support.memory.notes" xreflabel="Dynamic Memory Notes"><info><title>Additional Notes</title></info>
373    <para>
374      Remember that it is perfectly okay to <function>delete</function> a
375      null pointer!  Nothing happens, by definition.  That is not the
376      same thing as deleting a pointer twice.
377    </para>
378    <para>
379      <classname>std::bad_alloc</classname> is derived from the base
380      <classname>std::exception</classname> class,
381      see <xref linkend="std.diagnostics.exceptions"/>.
382    </para>
383    </section>
385 </section>
387 <section xml:id="std.support.termination" xreflabel="Termination"><info><title>Termination</title></info>
388   <?dbhtml filename="termination.html"?>
390   <section xml:id="support.termination.handlers" xreflabel="Termination Handlers"><info><title>Termination Handlers</title></info>
392     <para>
393       Not many changes here to
394       <filename class="headerfile">&lt;cstdlib&gt;</filename>.
395       You should note that the
396       <function>abort()</function> function does not call the
397       destructors of automatic nor static objects, so if you're
398       depending on those to do cleanup, it isn't going to happen.
399       (The functions registered with <function>atexit()</function>
400       don't get called either, so you can forget about that
401       possibility, too.)
402     </para>
403     <para>
404       The good old <function>exit()</function> function can be a bit
405       funky, too, until you look closer.  Basically, three points to
406       remember are:
407     </para>
408     <orderedlist inheritnum="ignore" continuation="restarts">
409       <listitem>
410         <para>
411         Static objects are destroyed in reverse order of their creation.
412         </para>
413       </listitem>
414       <listitem>
415         <para>
416         Functions registered with <function>atexit()</function> are called in
417         reverse order of registration, once per registration call.
418         (This isn't actually new.)
419         </para>
420       </listitem>
421       <listitem>
422         <para>
423         The previous two actions are <quote>interleaved,</quote> that is,
424         given this pseudocode:
425         </para>
426 <programlisting>
427   extern "C or C++" void f1 ();
428   extern "C or C++" void f2 ();
430   static Thing obj1;
431   atexit(f1);
432   static Thing obj2;
433   atexit(f2);
434 </programlisting>
435         <para>
436         then at a call of <function>exit()</function>,
437         <varname>f2</varname> will be called, then
438         <varname>obj2</varname> will be destroyed, then
439         <varname>f1</varname> will be called, and finally
440         <varname>obj1</varname> will be destroyed. If
441         <varname>f1</varname> or <varname>f2</varname> allow an
442         exception to propagate out of them, Bad Things happen.
443         </para>
444       </listitem>
445     </orderedlist>
446     <para>
447       Note also that <function>atexit()</function> is only required to store 32
448       functions, and the compiler/library might already be using some of
449       those slots.  If you think you may run out, we recommend using
450       the <function>xatexit</function>/<function>xexit</function> combination
451       from <literal>libiberty</literal>, which has no such limit.
452     </para>
453   </section>
455   <section xml:id="support.termination.verbose" xreflabel="Verbose Terminate Handler"><info><title>Verbose Terminate Handler</title></info>
456   <?dbhtml filename="verbose_termination.html"?>
458     <para>
459       If you are having difficulty with uncaught exceptions and want a
460       little bit of help debugging the causes of the core dumps, you can
461       make use of a GNU extension, the verbose terminate handler.
462     </para>
464     <para>
465       The verbose terminate handler is only available for hosted environments
466       (see <xref linkend="manual.intro.setup.configure"/>) and will be used
467       by default unless the library is built with
468       <option>--disable-libstdcxx-verbose</option>
469       or with exceptions disabled.
470       If you need to enable it explicitly you can do so by calling the
471       <function>std::set_terminate</function> function.
472     </para>
474 <programlisting>
475 #include &lt;exception&gt;
477 int main()
479   std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
480   ...
482   throw <replaceable>anything</replaceable>;
484 </programlisting>
486    <para>
487      The <function>__verbose_terminate_handler</function> function
488      obtains the name of the current exception, attempts to demangle
489      it, and prints it to <literal>stderr</literal>.
490      If the exception is derived from
491      <classname>std::exception</classname> then the output from
492      <function>what()</function> will be included.
493    </para>
495    <para>
496      Any replacement termination function is required to kill the
497      program without returning; this one calls <function>std::abort</function>.
498    </para>
500    <para>
501      For example:
502    </para>
504 <programlisting>
505 #include &lt;exception&gt;
506 #include &lt;stdexcept&gt;
508 struct argument_error : public std::runtime_error
510   argument_error(const std::string&amp; s): std::runtime_error(s) { }
513 int main(int argc)
515   std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
516   if (argc &gt; 5)
517     throw argument_error("argc is greater than 5!");
518   else
519     throw argc;
521 </programlisting>
523    <para>
524      With the verbose terminate handler active, this gives:
525    </para>
527    <screen>
528    <computeroutput>
529    % ./a.out
530    terminate called after throwing a `int'
531    Aborted
532    % ./a.out f f f f f f f f f f f
533    terminate called after throwing an instance of `argument_error'
534    what(): argc is greater than 5!
535    Aborted
536    </computeroutput>
537    </screen>
539    <para>
540      The 'Aborted' line is printed by the shell after the process exits
541      by calling <function>abort()</function>.
542    </para>
544    <para>
545      As this is the default termination handler, nothing need be done to
546      use it.  To go back to the previous <quote>silent death</quote>
547      method, simply include
548      <filename class="headerfile">&lt;exception&gt;</filename> and
549      <filename class="headerfile">&lt;cstdlib&gt;</filename>, and call
550    </para>
552    <programlisting>
553      std::set_terminate(std::abort);
554    </programlisting>
556    <para>
557      After this, all calls to <function>terminate</function> will use
558      <function>abort</function> as the terminate handler.
559    </para>
561    <para>
562      Note: the verbose terminate handler will attempt to write to
563      <literal>stderr</literal>.  If your application closes
564      <literal>stderr</literal> or redirects it to an inappropriate location,
565      <function>__verbose_terminate_handler</function> will behave in
566      an unspecified manner.
567    </para>
569   </section>
570 </section>
572 </chapter>