C++ 1998/2003 ISO C++ 1998
Implementation Status This status table is based on the table of contents of ISO/IEC 14882:2003. This section describes the C++ support in the GCC 10 release series. C++ 1998/2003 Implementation Status Section Description Status Comments 18 Language support 18.1 Types Y 18.2 Implementation properties Y 18.2.1 Numeric Limits 18.2.1.1 Class template numeric_limits Y 18.2.1.2 numeric_limits members Y 18.2.1.3 float_round_style Y 18.2.1.4 float_denorm_style Y 18.2.1.5 numeric_limits specializations Y 18.2.2 C Library Y 18.3 Start and termination Y 18.4 Dynamic memory management Y 18.5 Type identification 18.5.1 Class type_info Y 18.5.2 Class bad_cast Y 18.5.3 Class bad_typeid Y 18.6 Exception handling 18.6.1 Class exception Y 18.6.2 Violation exception-specifications Y 18.6.3 Abnormal termination Y 18.6.4 uncaught_exception Y 18.7 Other runtime support Y 19 Diagnostics 19.1 Exception classes Y 19.2 Assertions Y 19.3 Error numbers Y 20 General utilities 20.1 Requirements Y 20.2 Utility components 20.2.1 Operators Y 20.2.2 pair Y 20.3 Function objects 20.3.1 Base Y 20.3.2 Arithmetic operation Y 20.3.3 Comparisons Y 20.3.4 Logical operations Y 20.3.5 Negators Y 20.3.6 Binders Y 20.3.7 Adaptors for pointers to functions Y 20.3.8 Adaptors for pointers to members Y 20.4 Memory 20.4.1 The default allocator Y 20.4.2 Raw storage iterator Y 20.4.3 Temporary buffers Y 20.4.4 Specialized algorithms Y 20.4.4.1 uninitialized_copy Y 20.4.4.2 uninitialized_fill Y 20.4.4.3 uninitialized_fill_n Y 20.4.5 Class template auto_ptr Y 20.4.6 C library Y 21 Strings 21.1 Character traits 21.1.1 Character traits requirements Y 21.1.2 traits typedef Y 21.1.3 char_traits specializations 21.1.3.1 struct char_traits<char> Y 21.1.3.2 struct char_traits<wchar_t> Y 21.2 String classes Y 21.3 Class template basic_string Y 21.4 Null-terminated sequence utilities Y C library dependency 22 Localization 22.1 Locales 22.1.1 Class locale Y 22.1.2 locale globals Y 22.1.3 Convenience interfaces 22.1.3.1 Character classification Y 22.1.3.2 Character conversions Y 22.2 Standard locale categories 22.2.1 ctype Y 22.2.2 Numeric 22.2.2.1 num_get Y 22.2.2.2 num_put Y 22.2.3 num_punct Y 22.2.4 collate Y 22.2.5 Time 22.2.5.1 time_get Y 22.2.5.2 time_get_byname Y 22.2.5.3 time_put Y 22.2.5.3 time_put_byname Y 22.2.6 Monetary 22.2.6.1 money_get Y 22.2.6.2 money_put Y 22.2.6.3 money_punct Y 22.2.6.4 money_punct_byname Y 22.2.7 messages Y 22.2.8 Program-defined facets Y 22.3 C Library Locales Y 23 Containers 23.1 Container requirements Y 23.2 Sequence containers 23.2.1 Class template deque Y 23.2.2 Class template list Y 23.2.3 Adaptors 23.2.3.1 Class template queue Y 23.2.3.2 Class template priority_queue Y 23.2.3.3 Class template stack Y 23.2.4 Class template vector Y 23.2.5 Class vector<bool> Y 23.3 Associative containers 23.3.1 Class template map Y 23.3.2 Class template multimap Y 23.3.3 Class template set Y 23.3.4 Class template multiset Y 24 Iterators 24.1 Requirements Y 24.2 Header <iterator> synopsis Y 24.3 Iterator primitives Y 24.4 Predefined iterators and Iterator adaptors 24.4.1 Reverse iterators Y 24.4.2 Insert iterators Y 24.5 Stream iterators 24.5.1 Class template istream_iterator Y 24.5.2 Class template ostream_iterator Y 24.5.3 Class template istreambuf_iterator Y 24.5.4 Class template ostreambuf_iterator Y 25 Algorithms 25.1 Non-modifying sequence operations Y 25.2 Mutating sequence operations Y 25.3 Sorting and related operations Y 25.4 C library algorithms Y 26 Numerics 26.1 Numeric type requirements Y 26.2 Complex numbers Y 26.3 Numeric arrays 26.3.1 Header <valarray> synopsis Y 26.3.2 Class template valarray Y 26.3.3 valarray non-member operations Y 26.3.4 Class slice Y 26.3.5 Class template slice_array Y 26.3.6 Class gslice Y 26.3.7 Class template gslice_array Y 26.3.8 Class template mask_array Y 26.3.9 Class template indirect_array Y 26.4 Generalized numeric operations 26.4.1 accumulate Y 26.4.2 inner_product Y 26.4.3 partial_sum Y 26.4.4 adjacent_difference Y 26.4.5 iota Y 26.5 C Library Y 27 Input/output 27.1 Requirements Y 27.2 Forward declarations Y 27.3 Standard iostream objects Y 27.3.1 Narrow stream objects Y 27.3.2 Wide stream objects Y 27.4 Iostreams base classes Y 27.5 Stream buffers Y 27.6 Formatting and manipulators Y 27.7 String-based streams Y 27.8 File-based streams Y Appendix D Compatibility features D.1 Increment operator with bool operand D.2 static keyword D.3 Access declarations D.4 Implicit conversion from const strings D.5 C standard library headers D.6 Old iostreams members D.7 char* streams
Implementation Specific Behavior The ISO standard defines the following phrase:
[1.3.5] implementation-defined behavior Behavior, for a well-formed program construct and correct data, that depends on the implementation and that each implementation shall document.
We do so here, for the C++ library only. Behavior of the compiler, linker, runtime loader, and other elements of "the implementation" are documented elsewhere. Everything listed in Annex B, Implementation Qualities, are also part of the compiler, not the library. For each entry, we give the section number of the standard, when applicable. This list is probably incomplet and inkorrekt. [1.9]/11 #3 If isatty(3) is true, then interactive stream support is implied. [17.4.4.5] Non-reentrant functions are probably best discussed in the various sections on multithreading (see above). [18.1]/4 The type of NULL is described under Support. [18.3]/8 Even though it's listed in the library sections, libstdc++ has zero control over what the cleanup code hands back to the runtime loader. Talk to the compiler people. :-) [18.4.2.1]/5 (bad_alloc), [18.5.2]/5 (bad_cast), [18.5.3]/5 (bad_typeid), [18.6.1]/8 (exception), [18.6.2.1]/5 (bad_exception): The what() member function of class std::exception, and these other classes publicly derived from it, returns the name of the class, e.g. "std::bad_alloc". [18.5.1]/7 The return value of std::type_info::name() is the mangled type name. You will need to call c++filt and pass the names as command-line parameters to demangle them, or call a runtime demangler function. [20.1.5]/5 "Implementors are encouraged to supply libraries that can accept allocators that encapsulate more general memory models and that support non-equal instances. In such implementations, any requirements imposed on allocators by containers beyond those requirements that appear in Table 32, and the semantics of containers and algorithms when allocator instances compare non-equal, are implementation-defined." There is experimental support for non-equal allocators in the standard containers in C++98 mode. There are no additional requirements on allocators. It is undefined behaviour to swap two containers if their allocators are not equal. [21.1.3.1]/3,4, [21.1.3.2]/2, [21.3]/6 basic_string::iterator, basic_string::const_iterator, [23.*]'s foo::iterator, [27.*]'s foo::*_type, others... Nope, these types are called implementation-defined because you shouldn't be taking advantage of their underlying types. Listing them here would defeat the purpose. :-) [21.1.3.1]/5 I don't really know about the mbstate_t stuff... see the codecvt notes for what does exist. [22.*] Anything and everything we have on locale implementation will be described under Localization. [23.*] All of the containers in this clause define size_type as std::size_t and difference_type as std::ptrdiff_t. [26.2.8]/9 I have no idea what complex<T>'s pow(0,0) returns. [27.4.2.4]/2 Calling std::ios_base::sync_with_stdio after I/O has already been performed on the standard stream objects will flush the buffers, and destroy and recreate the underlying buffer instances. Whether or not the previously-written I/O is destroyed in this process depends mostly on the --enable-libio choice: for stdio, if the written data is already in the stdio buffer, the data may be completely safe! [27.6.1.1.2], [27.6.2.3] The I/O sentry ctor and dtor can perform additional work than the minimum required. We are not currently taking advantage of this yet. [27.7.1.3]/16, [27.8.1.4]/10 The effects of pubsetbuf/setbuf are described in the Input and Output chapter. [27.8.1.4]/16 Calling fstream::sync when a get area exists will... whatever fflush() does, I think.