| @c Copyright (C) 2009-2021 Free Software Foundation, Inc. |
| @c This is part of the GCC manual. |
| @c For copying conditions, see the file gcc.texi. |
| |
| @node C++ Implementation |
| @chapter C++ Implementation-Defined Behavior |
| @cindex implementation-defined behavior, C++ language |
| |
| A conforming implementation of ISO C++ is required to document its |
| choice of behavior in each of the areas that are designated |
| ``implementation defined''. The following lists all such areas, |
| along with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC |
| 14882:2003 standards. Some areas are only implementation-defined in |
| one version of the standard. |
| |
| Some choices depend on the externally determined ABI for the platform |
| (including standard character encodings) which GCC follows; these are |
| listed as ``determined by ABI'' below. @xref{Compatibility, , Binary |
| Compatibility}, and @uref{http://gcc.gnu.org/readings.html}. Some |
| choices are documented in the preprocessor manual. |
| @xref{Implementation-defined behavior, , Implementation-defined |
| behavior, cpp, The C Preprocessor}. Some choices are documented in |
| the corresponding document for the C language. @xref{C |
| Implementation}. Some choices are made by the library and operating |
| system (or other environment when compiling for a freestanding |
| environment); refer to their documentation for details. |
| |
| @menu |
| * Conditionally-supported behavior:: |
| * Exception handling:: |
| @end menu |
| |
| @node Conditionally-supported behavior |
| @section Conditionally-Supported Behavior |
| |
| @cite{Each implementation shall include documentation that identifies |
| all conditionally-supported constructs that it does not support (C++0x |
| 1.4).} |
| |
| @itemize @bullet |
| @item |
| @cite{Whether an argument of class type with a non-trivial copy |
| constructor or destructor can be passed to ... (C++0x 5.2.2).} |
| |
| Such argument passing is supported, using the same |
| pass-by-invisible-reference approach used for normal function |
| arguments of such types. |
| |
| @end itemize |
| |
| @node Exception handling |
| @section Exception Handling |
| |
| @itemize @bullet |
| @item |
| @cite{In the situation where no matching handler is found, it is |
| implementation-defined whether or not the stack is unwound before |
| std::terminate() is called (C++98 15.5.1).} |
| |
| The stack is not unwound before std::terminate is called. |
| |
| @end itemize |