aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/doc
AgeCommit message (Collapse)AuthorFilesLines
2025-06-12libstdc++: Improve documentation on copyright notices in new testsJonathan Wakely2-6/+17
Clarify that FSF copyright notices in tests are incorrect for contributions under DCO terms. Clarify the sentence about copying existing tests to clarify that it is only referring to copying the code in the test file, rather than just copying an existing file as a template for a new test. libstdc++-v3/ChangeLog: * doc/xml/manual/test.xml: Improve discussion of copyright notices in new test cases. * doc/html/manual/test.html: Regenerate.
2025-06-11libstdc++: Add _GLIBCXX_USE_BUILTIN_TRAIT to Doxygen configJonathan Wakely1-2/+4
This ensures that Doxygen sees the simpler definitions of type traits, which are implemented using the built-ins. Also add _GLIBCXX_HAVE_ICONV (which is less important) and fix some typos for _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE and _GLIBCXX_END_INLINE_ABI_NAMESPACE. libstdc++-v3/ChangeLog: * doc/doxygen/user.cfg.in (PREDEFINED): Remove -D prefixes from some macros. Define _GLIBCXX_USE_BUILTIN_TRAIT and _GLIBCXX_HAVE_ICONV macros.
2025-06-11libstdc++: Remove unused 'test' variables in test casesJonathan Wakely2-26/+0
These variables could be used by custom definitions of the VERIFY macro prior to GCC 7.1 but serve no purpose now. They can be removed, along with the documentation with the historical note. libstdc++-v3/ChangeLog: * doc/xml/manual/test.xml: Remove note about unused 'test' variables for old definition of VERIFY. * doc/html/manual/test.html: Regenerate. * testsuite/experimental/net/buffer/arithmetic.cc: Remove unused variable. * testsuite/experimental/net/buffer/const.cc: Likewise. * testsuite/experimental/net/buffer/mutable.cc: Likewise. * testsuite/experimental/net/buffer/size.cc: Likewise. * testsuite/experimental/net/timer/waitable/cons.cc: Likewise. * testsuite/experimental/net/timer/waitable/dest.cc: Likewise. * testsuite/experimental/net/timer/waitable/ops.cc: Likewise. * testsuite/ext/special_functions/airy_ai/check_value.cc: Likewise. * testsuite/ext/special_functions/airy_bi/check_value.cc: Likewise. * testsuite/ext/special_functions/conf_hyperg/check_value.cc: Likewise. * testsuite/ext/special_functions/hyperg/check_value.cc: Likewise. * testsuite/special_functions/01_assoc_laguerre/check_value.cc: Likewise. * testsuite/special_functions/02_assoc_legendre/check_value.cc: Likewise. * testsuite/special_functions/02_assoc_legendre/pr86655.cc: Likewise. * testsuite/special_functions/03_beta/check_value.cc: Likewise. * testsuite/special_functions/04_comp_ellint_1/check_value.cc: Likewise. * testsuite/special_functions/05_comp_ellint_2/check_value.cc: Likewise. * testsuite/special_functions/06_comp_ellint_3/check_value.cc: Likewise. * testsuite/special_functions/07_cyl_bessel_i/check_value.cc: Likewise. * testsuite/special_functions/08_cyl_bessel_j/check_value.cc: Likewise. * testsuite/special_functions/09_cyl_bessel_k/check_value.cc: Likewise. * testsuite/special_functions/10_cyl_neumann/check_value.cc: Likewise. * testsuite/special_functions/11_ellint_1/check_value.cc: Likewise. * testsuite/special_functions/12_ellint_2/check_value.cc: Likewise. * testsuite/special_functions/13_ellint_3/check_value.cc: Likewise. * testsuite/special_functions/14_expint/check_value.cc: Likewise. * testsuite/special_functions/15_hermite/check_value.cc: Likewise. * testsuite/special_functions/16_laguerre/check_value.cc: Likewise. * testsuite/special_functions/17_legendre/check_value.cc: Likewise. * testsuite/special_functions/18_riemann_zeta/check_value.cc: Likewise. * testsuite/special_functions/19_sph_bessel/check_value.cc: Likewise. * testsuite/special_functions/20_sph_legendre/check_value.cc: Likewise. * testsuite/special_functions/20_sph_legendre/pr86655.cc: Likewise. * testsuite/special_functions/21_sph_neumann/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/01_assoc_laguerre/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/02_assoc_legendre/pr86655.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/03_beta/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/04_comp_ellint_1/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/05_comp_ellint_2/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/06_comp_ellint_3/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/07_conf_hyperg/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/08_cyl_bessel_i/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/09_cyl_bessel_j/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/10_cyl_bessel_k/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/11_cyl_neumann/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/12_ellint_1/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/13_ellint_2/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/14_ellint_3/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/15_expint/check_value_neg.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/16_hermite/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/18_laguerre/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/19_legendre/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/20_riemann_zeta/check_value_neg.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/21_sph_bessel/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/check_value.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/22_sph_legendre/pr86655.cc: Likewise. * testsuite/tr1/5_numerical_facilities/special_functions/23_sph_neumann/check_value.cc: Likewise. Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-05-29libstdc++: Document that -std cannot be used in --target_board nowJonathan Wakely2-22/+6
Only using GLIBCXX_TESTSUITE_STDS or v3_std_list works now. libstdc++-v3/ChangeLog: * doc/xml/manual/test.xml: Remove outdated documentation on testing with -std options in --target_board. * doc/html/manual/test.html: Regenerate.
2025-05-26libstdc++: Implement C++26 std::indirect [PR119152]Jonathan Wakely1-0/+1
This patch implements C++26 std::indirect as specified in P3019 with amendment to move assignment from LWG 4251. PR libstdc++/119152 libstdc++-v3/ChangeLog: * doc/doxygen/stdheader.cc: Added indirect.h file. * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/bits/indirect.h: New file. * include/bits/version.def (indirect): Define. * include/bits/version.h: Regenerate. * include/std/memory: Include new header. * testsuite/std/memory/indirect/copy.cc * testsuite/std/memory/indirect/copy_alloc.cc * testsuite/std/memory/indirect/ctor.cc * testsuite/std/memory/indirect/incomplete.cc * testsuite/std/memory/indirect/invalid_neg.cc * testsuite/std/memory/indirect/move.cc * testsuite/std/memory/indirect/move_alloc.cc * testsuite/std/memory/indirect/relops.cc Co-authored-by: Tomasz Kamiński <tkaminsk@redhat.com> Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-05-26libstdc++: Implement C++26 function_ref [PR119126]Tomasz Kamiński1-0/+1
This patch implements C++26 function_ref as specified in P0792R14, with correction for constraints for constructor accepting nontype_t parameter from LWG 4256. As function_ref may store a pointer to the const object, __Ptrs::_M_obj is changed to const void*, so again we do not cast away const from const objects. To help with necessary casts, a __polyfunc::__cast_to helper is added, that accepts reference to or target type direclty. The _Invoker now defines additional call methods used by function_ref: _S_ptrs() for invoking target passed by reference, and __S_nttp, _S_bind_ptr, _S_bind_ref for handling constructors accepting nontype_t. The existing _S_call_storage is changed to thin wrapper, that initialies _Ptrs, and forwards to _S_call_ptrs. This reduced the most uses of _Storage::_M_ptr and _Storage::_M_ref, so this functions was removed, and _Manager uses were adjusted. Finally we make function_ref available in freestanding mode, as move_only_function and copyable_function are currently only available in hosted, so we define _Manager and _Mo_base only if either __glibcxx_move_only_function or __glibcxx_copyable_function is defined. PR libstdc++/119126 libstdc++-v3/ChangeLog: * doc/doxygen/stdheader.cc: Added funcref_impl.h file. * include/Makefile.am: Added funcref_impl.h file. * include/Makefile.in: Added funcref_impl.h file. * include/bits/funcref_impl.h: New file. * include/bits/funcwrap.h: (_Ptrs::_M_obj): Const-qualify. (_Storage::_M_ptr, _Storage::_M_ref): Remove. (__polyfunc::__cast_to) Define. (_Base_invoker::_S_ptrs, _Base_invoker::_S_nttp) (_Base_invoker::_S_bind_ptrs, _Base_invoker::_S_bind_ref) (_Base_invoker::_S_call_ptrs): Define. (_Base_invoker::_S_call_storage): Foward to _S_call_ptrs. (_Manager::_S_local, _Manager::_S_ptr): Adjust for _M_obj being const qualified. (__polyfunc::_Manager, __polyfunc::_Mo_base): Guard with __glibcxx_move_only_function || __glibcxx_copyable_function. (__polyfunc::__skip_first_arg, __polyfunc::__deduce_funcref) (std::function_ref) [__glibcxx_function_ref]: Define. * include/bits/utility.h (std::nontype_t, std::nontype) (__is_nontype_v) [__glibcxx_function_ref]: Define. * include/bits/version.def: Define function_ref. * include/bits/version.h: Regenerate. * include/std/functional: Define __cpp_lib_function_ref. * src/c++23/std.cc.in (std::nontype_t, std::nontype) (std::function_ref) [__cpp_lib_function_ref]: Export. * testsuite/20_util/function_ref/assign.cc: New test. * testsuite/20_util/function_ref/call.cc: New test. * testsuite/20_util/function_ref/cons.cc: New test. * testsuite/20_util/function_ref/cons_neg.cc: New test. * testsuite/20_util/function_ref/conv.cc: New test. * testsuite/20_util/function_ref/deduction.cc: New test. * testsuite/20_util/function_ref/mutation.cc: New test. Reviewed-by: Jonathan Wakely <jwakely@redhat.com> Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-05-20libstdc++: Fix incorrect links to archived SGI STL docsJonathan Wakely11-24/+24
In r8-7777-g25949ee33201f2 I updated some URLs to point to copies of the SGI STL docs in the Wayback Machine, because the original pags were no longer hosted on sgi.com. However, I incorrectly assumed that if one archived page was at https://web.archive.org/web/20171225062613/... then all the other pages would be too. Apparently that's not how the Wayback Machine works, and each page is archived on a different date. That meant that some of our links were redirecting to archived copies of the announcement that the SGI STL docs have gone away. This fixes each URL to refer to a correctly archived copy of the original docs. libstdc++-v3/ChangeLog: * doc/xml/faq.xml: Update URL for archived SGI STL docs. * doc/xml/manual/containers.xml: Likewise. * doc/xml/manual/extensions.xml: Likewise. * doc/xml/manual/using.xml: Likewise. * doc/xml/manual/utilities.xml: Likewise. * doc/html/*: Regenerate.
2025-05-15libstdc++: Deprecate non-standard std::fabs(const complex<T>&) [PR120235]Jonathan Wakely6-6/+16
There was an overload of fabs for std::complex in TR1 and in some C++0x drafts, but it was removed from the working draft by LWG 595. Since we've been providing it for decades we should deprecate it before removing it. libstdc++-v3/ChangeLog: PR libstdc++/120235 * doc/html/*: Regenerate. * doc/xml/manual/evolution.xml: Document deprecation. * include/std/complex: Replace references to TR1 subclauses with corresponding C++11 subclauses. (fabs): Add deprecated attribute. * testsuite/26_numerics/complex/fabs_neg.cc: New test. Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-05-14libstdc++: Renamed bits/move_only_function.h to bits/funcwrap.h [PR119125]Tomasz Kamiński1-1/+1
The file now includes copyable_function in addition to move_only_function. PR libstdc++/119125 libstdc++-v3/ChangeLog: * include/bits/move_only_function.h: Move to... * include/bits/funcwrap.h: ...here. * doc/doxygen/stdheader.cc (init_map): Replaced move_only_function.h with funcwrap.h, and changed include guard to use feature test macro. Move bits/version.h include before others. * include/Makefile.am: Likewise. * include/Makefile.in: Likewise. * include/std/functional: Likewise. Reviewed-by: Patrick Palka <ppalka@redhat.com> Reviewed-by: Jonathan Wakely <jwakely@redhat.com> Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-05-14libstdc++: Implement C++26 copyable_function [PR119125]Tomasz Kamiński1-0/+1
This patch implements C++26 copyable_function as specified in P2548R6. It also implements LWG 4255 that adjust move_only_function so constructing from empty copyable_function, produces empty functor. This falls from existing checks, after specializing __is_polymorphic_function_v for copyable_function specializations. For compatible invoker signatures, the move_only_function may be constructed from copyable_funciton without double indirection. To achieve that we derive _Cpy_base from _Mo_base, and specialize __is_polymorphic_function_v for copyable_function. Similary copyable_functions with compatible signatures can be converted without double indirection. As we starting to use _Op::_Copy operation from the _M_manage function, invocations of that functions may now throw exceptions, so noexcept needs to be removed from the signature of stored _M_manage pointers. This also affects operations in _Mo_base, however we already wrap _M_manage invocations in noexcept member functions (_M_move, _M_destroy, swap). PR libstdc++/119125 libstdc++-v3/ChangeLog: * doc/doxygen/stdheader.cc: Addded cpyfunc_impl.h header. * include/Makefile.am: Add bits cpyfunc_impl.h. * include/Makefile.in: Add bits cpyfunc_impl.h. * include/bits/cpyfunc_impl.h: New file. * include/bits/mofunc_impl.h: Mention LWG 4255. * include/bits/move_only_function.h: Update header description and change guard to also check __glibcxx_copyable_function. (_Manager::_Func): Remove noexcept. (std::__is_polymorphic_function_v<move_only_function<_Tp>>) (__variant::_Never_valueless_alt<std::move_only_function<_Signature...>>) (move_only_function) [__glibcxx_move_only_function]: Adjust guard. (std::__is_polymorphic_function_v<copyable_function<_Tp>>) (__variant::_Never_valueless_alt<std::copyable_function<_Signature...>>) (__polyfunc::_Cpy_base, std::copyable_function) [__glibcxx_copyable_function]: Define. * include/bits/version.def: Define copyable_function. * include/bits/version.h: Regenerate. * include/std/functional: Define __cpp_lib_copyable_function. * src/c++23/std.cc.in (copyable_function) [__cpp_lib_copyable_function]: Export. * testsuite/20_util/copyable_function/call.cc: New test based on move_only_function tests. * testsuite/20_util/copyable_function/cons.cc: New test based on move_only_function tests. * testsuite/20_util/copyable_function/conv.cc: New test based on move_only_function tests. * testsuite/20_util/copyable_function/copy.cc: New test. * testsuite/20_util/copyable_function/move.cc: New test based on move_only_function tests. Reviewed-by: Jonathan Wakely <jwakely@redhat.com> Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-05-12libstdc++: Update C++23 status tableJonathan Wakely2-40/+45
This should have been updated for the GCC 15.1 release. libstdc++-v3/ChangeLog: * doc/xml/manual/status_cxx2023.xml: Update status of proposals implemented after GCC 14.2 release. * doc/html/manual/status.html: Regenerate.
2025-05-12libstdc++: Update <charconv> rows in C++17 status tableJonathan Wakely3-6/+38
Document that std::to_chars and std::from_chars are complete, mentioning the libraries used for floating-point types. libstdc++-v3/ChangeLog: * doc/xml/manual/status_cxx2017.xml: Update status for std::to_chars and std::from_chars. * doc/html/manual/*: Regenerate. Reviewed-by: Jakub Jelinek <jakub@redhat.com> Reviewed-by: Björn Schäpers <gcc@hazardy.de>
2025-05-07libstdc++: Add header mdspan to the build-system.Luc Grosheintz1-0/+1
Creates a nearly empty header mdspan and adds it to the build-system and Doxygen config file. libstdc++-v3/ChangeLog: * doc/doxygen/user.cfg.in: Add <mdspan>. * include/Makefile.am: Ditto. * include/Makefile.in: Ditto. * include/precompiled/stdc++.h: Ditto. * include/std/mdspan: New file. Signed-off-by: Luc Grosheintz <luc.grosheintz@gmail.com>
2025-04-18libstdc++: Clarify that _S_ prefix is be used for static member functions.Tomasz Kamiński1-1/+1
libstdc++-v3/ChangeLog: * doc/xml/manual/appendix_contributing.xml: Add 'and functions'.
2025-04-14libstdc++: Document thread-safety for COW std::string [PR21334]Jonathan Wakely2-0/+22
The gcc4-compatible copy-on-write std::string does not conform to the C++11 requirements on data race avoidance in standard containers. Specifically, calling non-const member functions such as begin() and data() needs to do the "copy on write" operation and so is most definitely a modification of the object. As such, those non-const members must not be called concurrently with any other uses of the string object. libstdc++-v3/ChangeLog: PR libstdc++/21334 * doc/xml/manual/using.xml: Document that container data race avoidance rules do not apply to COW std::string. * doc/html/*: Regenerate.
2025-04-07libstdc++: Add new headers to Doxygen config fileJonathan Wakely1-0/+5
libstdc++-v3/ChangeLog: * doc/doxygen/user.cfg.in (INPUT): Add flat_map, flat_set, text_encoding, stdbit.h and stdckdint.h.
2025-03-24libstdc++: Fix some broken links in the manualJonathan Wakely2-4/+4
libstdc++-v3/ChangeLog: * doc/xml/manual/policy_data_structures_biblio.xml: Fix two broken links. * doc/html/manual/policy_data_structures.html: Regenerate.
2025-03-19libstdc++: Correct statement about default -std optionJonathan Wakely2-4/+4
The default is -std=gnu++17 now, not -std=gnu++14. libstdc++-v3/ChangeLog: * doc/xml/manual/test.xml: Fix default for -std option. * doc/html/manual/test.html: Regenerate.
2025-03-12libstdc++: Add lambda example to case transformation docsJonathan Wakely2-9/+29
libstdc++-v3/ChangeLog: * doc/xml/manual/strings.xml: Tweak formatting. Add example using lambda. * doc/html/manual/strings.html: Regenerate.
2025-03-04libstdc++: Remove stray comma in testing docsJonathan Wakely2-2/+2
libstdc++-v3/ChangeLog: * doc/xml/manual/test.xml: Remove stray comma. * doc/html/manual/test.html: Regenerate.
2025-01-08libstdc++: Fix incorrect DocBook element in manualJonathan Wakely3-6/+6
libstdc++-v3/ChangeLog: * doc/xml/manual/evolution.xml: Replace invalid <variable> elements with <varname>. * doc/html/*: Regenerate.
2025-01-02Update copyright years.Jakub Jelinek3-3/+3
2025-01-01libstdc++: Delete further Profile Mode leftoversGerald Pfeifer6-409/+0
Commit 544be2beb1fa in 2019 remove Profile Mode and associated docs. Now also remove generated HTML files. libstdc++-v3: * doc/html/manual/profile_mode.html: Delete. * doc/html/manual/profile_mode_api.html: Ditto. * doc/html/manual/profile_mode_cost_model.html: Ditto. * doc/html/manual/profile_mode_design.html: Ditto. * doc/html/manual/profile_mode_devel.html: Ditto. * doc/html/manual/profile_mode_impl.html: Ditto.
2024-12-29libstdc++: Delete leftover from Profile Mode removalGerald Pfeifer1-557/+0
Commit 544be2beb1fa in 2019 remove Profile Mode and associated docs including the XML version of profile_mode_diagnostics.html. Somehow the latter survived until now. Simply delete it as well. libstdc++-v3: * doc/html/manual/profile_mode_diagnostics.html: Delete.
2024-11-18libstdc++: Update reference to Angelika Langer's articleGerald Pfeifer2-2/+2
libstdc++-v3: * doc/xml/manual/allocator.xml: Update reference to Angelika Langer's article. * doc/html/manual/memory.html: Regenerate.
2024-11-17libstdc++: Move a gcc.gnu.org link to httpsGerald Pfeifer2-2/+2
libstdc++-v3: * doc/xml/manual/intro.xml: Move a gcc.gnu.org link to https. * doc/html/manual/license.html: Regenerate.
2024-11-17libstdc++: Update link to Angelika Langer's bookGerald Pfeifer2-2/+2
libstdc++-v3: * doc/xml/manual/io.xml: Update link to Angelika Langer's book. * doc/html/manual/streambufs.html: Regenerate.
2024-11-13libstdc++: Refactor std::hash specializationsJonathan Wakely2-0/+8
This attempts to simplify and clean up our std::hash code. The primary benefit is improved diagnostics for users when they do something wrong involving std::hash or unordered containers. An additional benefit is that for the unstable ABI (--enable-symvers=gnu-versioned-namespace) we can reduce the memory footprint of several std::hash specializations. In the current design, __hash_enum is a base class of the std::hash primary template, but the partial specialization of __hash_enum for non-enum types is disabled. This means that if a user forgets to specialize std::hash for their class type (or forgets to use a custom hash function for unordered containers) they get error messages about std::__hash_enum not being constructible. This is confusing when there is no enum type involved: why should users care about __hash_enum not being constructible if they're not trying to hash enums? This change makes the std::hash primary template only derive from __hash_enum when the template argument type is an enum. Otherwise, it derives directly from a new class template, __hash_not_enabled. This new class template defines the deleted members that cause a given std::hash specialization to be a disabled specialization (as per P0513R0). Now when users try to use a disabled specialization, they get more descriptive errors that mention __hash_not_enabled instead of __hash_enum. Additionally, adjust __hash_base to remove the deprecated result_type and argument_type typedefs for C++20 and later. In the current code we use a __poison_hash base class in the std::hash specializations for std::unique_ptr, std::optional, and std::variant. The primary template of __poison_hash has deleted special members, which is used to conditionally disable the derived std::hash specialization. This can also result in confusing diagnostics, because seeing "poison" in an enabled specialization is misleading. Only some uses of __poison_hash actually "poison" anything, i.e. cause a specialization to be disabled. In other cases it's just an empty base class that does nothing. This change removes __poison_hash and changes the std::hash specializations that were using it to conditionally derive from __hash_not_enabled instead. When the std::hash specialization is enabled, there is no more __poison_hash base class. However, to preserve the ABI properties of those std::hash specializations, we need to replace __poison_hash with some other empty base class. This is needed because in the current code std::hash<std::variant<int, const int>> has two __poison_hash<int> base classes, which must have unique addresses, so sizeof(std::hash<std::variant<int, const int>>) == 2. To preserve this unfortunate property, a new __hash_empty_base class is used as a base class to re-introduce du0plicate base classes that increase the class size. For the unstable ABI we don't use __hash_empty_base so the std::hash<std::variant<T...>> specializations are always size 1, and the class hierarchy is much simpler so will compile faster. Additionally, remove the result_type and argument_type typedefs from all disabled specializations of std::hash for std::unique_ptr, std::optional, and std::variant. Those typedefs are useless for disabled specializations, and although the standard doesn't say they must *not* be present for disabled specializations, it certainly only requires them for enabled specializations. Finally, for C++20 the typedefs are also removed from enabled specializations of std::hash for std::unique_ptr, std::optional, and std::variant. libstdc++-v3/ChangeLog: * doc/xml/manual/evolution.xml: Document removal of nested types from std::hash specializations. * doc/html/manual/api.html: Regenerate. * include/bits/functional_hash.h (__hash_base): Remove deprecated nested types for C++20. (__hash_empty_base): Define new class template. (__is_hash_enabled_for): Define new variable template. (__poison_hash): Remove. (__hash_not_enabled): Define new class template. (__hash_enum): Remove partial specialization for non-enums. (hash): Derive from __hash_not_enabled for non-enums, instead of __hash_enum. * include/bits/unique_ptr.h (__uniq_ptr_hash): Derive from __hash_base. Conditionally derive from __hash_empty_base. (__uniq_ptr_hash<>): Remove disabled specialization. (hash): Do not derive from __hash_base unconditionally. Conditionally derive from either __uniq_ptr_hash or __hash_not_enabled. * include/std/optional (__optional_hash_call_base): Remove. (__optional_hash): Define new class template. (hash): Derive from either (hash): Conditionally derive from either __optional_hash or __hash_not_enabled. Remove nested typedefs. * include/std/variant (_Base_dedup): Replace __poison_hash with __hash_empty_base. (__variant_hash_call_base_impl): Remove. (__variant_hash): Define new class template. (hash): Conditionally derive from either __variant_hash or __hash_not_enabled. Remove nested typedefs. * testsuite/20_util/optional/hash.cc: Check whether nested types are present. * testsuite/20_util/variant/hash.cc: Likewise. * testsuite/20_util/optional/hash_abi.cc: New test. * testsuite/20_util/unique_ptr/hash/abi.cc: New test. * testsuite/20_util/unique_ptr/hash/types.cc: New test. * testsuite/20_util/variant/hash_abi.cc: New test.
2024-11-06libstdc++: Deprecate useless <cxxx> compatibility headers for C++17Jonathan Wakely2-0/+18
These headers make no sense for C++ programs, because they either define different content to the corresponding <xxx.h> C header, or define nothing at all in namespace std. They were all deprecated in C++17, so add deprecation warnings to them, which can be disabled with -Wno-deprecated. For C++20 and later these headers are no longer in the standard at all, so compiling with _GLIBCXX_USE_DEPRECATED defined to 0 will give an error when they are included. Because #warning is non-standard before C++23 we need to use pragmas to ignore -Wc++23-extensions for the -Wsystem-headers -pedantic case. One g++ test needs adjustment because it includes <ciso646>, but that can be made conditional on the __cplusplus value without any reduction in test coverage. For the library tests, consolidate the std_c++0x_neg.cc XFAIL tests into the macros.cc test, using dg-error with a { target c++98_only } selector. This avoids having two separate test files, one for C++98 and one for everything later. Also add tests for the <xxx.h> headers to ensure that they behave as expected and don't give deprecated warnings. libstdc++-v3/ChangeLog: * doc/xml/manual/evolution.xml: Document deprecations. * doc/html/*: Regenerate. * include/c_compatibility/complex.h (_GLIBCXX_COMPLEX_H): Move include guard to start of file. Include <complex> directly instead of <ccomplex>. * include/c_compatibility/tgmath.h: Include <cmath> and <complex> directly, instead of <ctgmath>. * include/c_global/ccomplex: Add deprecated #warning for C++17 and #error for C++20 if _GLIBCXX_USE_DEPRECATED == 0. * include/c_global/ciso646: Likewise. * include/c_global/cstdalign: Likewise. * include/c_global/cstdbool: Likewise. * include/c_global/ctgmath: Likewise. * include/c_std/ciso646: Likewise. * include/precompiled/stdc++.h: Do not include ccomplex, ciso646, cstdalign, cstdbool, or ctgmath in C++17 and later. * testsuite/18_support/headers/cstdalign/macros.cc: Check for warnings and errors for unsupported dialects. * testsuite/18_support/headers/cstdbool/macros.cc: Likewise. * testsuite/26_numerics/headers/ctgmath/complex.cc: Likewise. * testsuite/27_io/objects/char/1.cc: Do not include <ciso646>. * testsuite/27_io/objects/wchar_t/1.cc: Likewise. * testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc: Removed. * testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc: Removed. * testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc: Removed. * testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc: Removed. * testsuite/18_support/headers/ciso646/macros.cc: New test. * testsuite/18_support/headers/ciso646/macros.h.cc: New test. * testsuite/18_support/headers/cstdbool/macros.h.cc: New test. * testsuite/26_numerics/headers/ccomplex/complex.cc: New test. * testsuite/26_numerics/headers/ccomplex/complex.h.cc: New test. * testsuite/26_numerics/headers/ctgmath/complex.h.cc: New test. gcc/testsuite/ChangeLog: * g++.old-deja/g++.other/headers1.C: Do not include ciso646 for C++17 and later.
2024-10-30libstdc++: Fix some typos and grammatical errors in docsJonathan Wakely2-12/+12
Also remove some redundant 'void' parameters from code examples. libstdc++-v3/ChangeLog: * doc/xml/manual/using_exceptions.xml: Fix typos and grammatical errors. * doc/html/manual/using_exceptions.html: Regenerate.
2024-10-23libstdc++: Add -D_GLIBCXX_ASSERTIONS default for -O0 to API historyJonathan Wakely6-4/+14
libstdc++-v3/ChangeLog: * doc/xml/manual/evolution.xml: Document that assertions are enabled for unoptimized builds. * doc/html/*: Regenerate.
2024-10-23libstdc++: Add GLIBCXX_TESTSUITE_STDS example to docsJonathan Wakely2-4/+6
libstdc++-v3/ChangeLog: * doc/xml/manual/test.xml: Add GLIBCXX_TESTSUITE_STDS example. * doc/html/manual/test.html: Regenerate.
2024-10-09libstdc++: Enable _GLIBCXX_ASSERTIONS by default for -O0 [PR112808]Jonathan Wakely2-6/+22
Too many users don't know about -D_GLIBCXX_ASSERTIONS and so are missing valuable checks for C++ standard library preconditions. This change enables libstdc++ assertions by default when compiling with -O0 so that we diagnose more bugs by default. When users enable optimization we don't add the assertions by default (because they have non-zero overhead) so they still need to enable them manually. For users who really don't want the assertions even in unoptimized builds, defining _GLIBCXX_NO_ASSERTIONS will prevent them from being enabled automatically. libstdc++-v3/ChangeLog: PR libstdc++/112808 * doc/xml/manual/using.xml (_GLIBCXX_ASSERTIONS): Document implicit definition for -O0 compilation. (_GLIBCXX_NO_ASSERTIONS): Document. * doc/html/manual/using_macros.html: Regenerate. * include/bits/c++config [!__OPTIMIZE__] (_GLIBCXX_ASSERTIONS): Define for unoptimized builds.
2024-10-09libstdc++: Simplify std::aligned_storage and fix for versioned namespace ↵Jonathan Wakely1-1/+1
[PR61458] This simplifies the implementation of std::aligned_storage. For the unstable ABI it also fixes the bug where its size is too large when the default alignment is used. We can't fix that for the stable ABI though, so just add a comment about the bug. libstdc++-v3/ChangeLog: PR libstdc++/61458 * doc/doxygen/user.cfg.in (GENERATE_BUGLIST): Set to NO. * include/std/type_traits (__aligned_storage_msa): Remove. (__aligned_storage_max_align_t): New struct. (__aligned_storage_default_alignment): New function. (aligned_storage): Use __aligned_storage_default_alignment for default alignment. Replace union with a struct containing an aligned buffer. Improve Doxygen comment. (aligned_storage_t): Use __aligned_storage_default_alignment for default alignment.
2024-09-20libstdc++: Document missing features for old std:string ABI [PR116777]Jonathan Wakely2-2/+42
There are several features that are not supported when using the old std::string ABI. It's possible that PR 81967 will get fixed, but the missing C++20 features almost certainly won't be. Document this in the manual. libstdc++-v3/ChangeLog: PR libstdc++/116777 * doc/xml/manual/using.xml: Document features that are not supported for the gcc4-compatible ABI. * doc/html/manual/using_dual_abi.html: Regenerate.
2024-09-16libstdc++: Update link to installation docsGerald Pfeifer2-2/+2
libstdc++-v3: * doc/xml/manual/intro.xml: Update link to installation docs. * doc/html/manual/make.html: Regenerate.
2024-09-15libstdc++: Enable most of <chrono> for freestandingJonathan Wakely2-0/+19
This makes durations, time points and calendrical types available for freestanding. The clocks and time zone utilities are disabled for freestanding, as they require functions in the hosted lib. Add support for a new macro _GLIBCXX_NO_FREESTANDING_CHRONO which can be used to explicitly disable <chrono> for freestanding. libstdc++-v3/ChangeLog: * doc/xml/manual/using.xml (_GLIBCXX_NO_FREESTANDING_CHRONO): Document macro. * doc/html/*: Regenerate. * include/bits/chrono.h [_GLIBCXX_NO_FREESTANDING_CHRONO]: Only include <bits/require_hosted.h> when this macro is defined. [_GLIBCXX_HOSTED]: Only define clocks for hosted. * include/bits/version.def (chrono_udls): Remove hosted=yes. * include/bits/version.h: Regenerate. * include/std/chrono [_GLIBCXX_HOSTED]: Only define clocks and time zone utilities for hosted. * testsuite/std/time/freestanding.cc: New test.
2024-08-23libstdc++: Update and clarify Doxygen version requirements in manualJonathan Wakely6-10/+11
There are lots of bugs that affect libstdc++ output from Doxygen, so using 1.9.6 or later is recommended. Give a lower minimum, because some distros still use 1.9.1 and that will work, albeit suboptimally. libstdc++-v3/ChangeLog: * doc/xml/manual/documentation_hacking.xml: Update minimum Doxygen version. * doc/html/*: Regenerate.
2024-08-18libstdc++: Remove note from the GCC 4.0.1 daysGerald Pfeifer2-8/+2
libstdc++-v3: * doc/xml/manual/prerequisites.xml: Remove note from the GCC 4.0.1 days. * doc/html/manual/setup.html: Regenerate.
2024-08-17libstdc++: Update references to gcc.gnu.org/onlinedocsGerald Pfeifer13-17/+17
libstdc++-v3: * doc/xml/manual/abi.xml: Update reference to gcc.gnu.org/onlinedocs. * doc/xml/manual/concurrency_extensions.xml (interface): Ditto. * doc/xml/manual/extensions.xml: Ditto. * doc/xml/manual/parallel_mode.xml: Ditto. * doc/xml/manual/shared_ptr.xml: Ditto. * doc/xml/manual/using_exceptions.xml: Ditto. And change GNU GCC to GCC. * doc/html/manual/abi.html: Regenerate. * doc/html/manual/ext_concurrency_impl.html: Ditto. * doc/html/manual/ext_demangling.html: Ditto. * doc/html/manual/memory.html: Ditto. * doc/html/manual/parallel_mode_design.html: Ditto. * doc/html/manual/parallel_mode_using.html: Ditto. * doc/html/manual/using_exceptions.html: Ditto.
2024-08-17libstdc++: Tweak links to installation docsGerald Pfeifer2-5/+6
libstdc++v-3: * doc/xml/manual/prerequisites.xml: Tweak two links to installation docs. Fix grammar. * doc/html/manual/setup.html: Regenerate.
2024-07-12libstdc++: Switch gcc.gnu.org links to httpsGerald Pfeifer5-10/+10
libstdc++-v3: * doc/xml/manual/using.xml: Switch gcc.gnu.org links to https. * doc/html/manual/using_concurrency.html: Regenerate. * doc/html/manual/using_dynamic_or_shared.html: Ditto. * doc/html/manual/using_headers.html: Ditto. * doc/html/manual/using_namespaces.html: Ditto.
2024-07-07libstdc++: Tweak two links in configuration docsGerald Pfeifer2-4/+4
libstdc++-v3: * doc/xml/manual/configure.xml: Update Autobook 14 link. Update GCC installation instructions link. * doc/html/manual/configure.html: Regenerate.
2024-06-25libstdc++: Replace viewcvs links in docs with cgit linksJonathan Wakely7-19/+19
libstdc++-v3/ChangeLog: * doc/xml/faq.xml: Replace viewcvs links with cgit links. * doc/xml/manual/allocator.xml: Likewise. * doc/xml/manual/mt_allocator.xml: Likewise. * doc/html/*: Regenerate.
2024-06-22libstdc++: Move gcc.gnu.org and sourceware.org links to httpsGerald Pfeifer2-9/+9
libstdc++-v3: * doc/xml/manual/debug.xml: Move gcc.gnu.org link to https. Ditto for sourceware.org links. * doc/html/manual/debug.html: Regenerate.
2024-06-05libstdc++: Update gcc.gnu.org links in FAQ to httpsGerald Pfeifer2-10/+10
libstdc++-v3: * doc/xml/faq.xml: Move gcc.gnu.org to https. * doc/html/faq.html: Regenerate.
2024-06-02libstdc++: Move gcc.gnu.org links to httpsGerald Pfeifer2-7/+7
libstdc++-v3: * doc/xml/api.xml: Move gcc.gnu.org links to https. * doc/html/api.html: Regenerate.
2024-06-01libstdc++: Replace link to gcc-4.3.2 docs in manual [PR115269]Jonathan Wakely2-32/+11
Link to the docs for GCC trunk instead. For the release branches, the link should be to the docs for appropriate release branch. Also replace the incomplete/outdated list of explicit -std options with a single entry for the -std option. libstdc++-v3/ChangeLog: PR libstdc++/115269 * doc/xml/manual/using.xml: Replace link to gcc-4.3.2 docs. Replace list of -std=... options with a single entry for -std. * doc/html/manual/using.html: Regenerate.
2024-05-14libstdc++: Document when std::string::shrink_to_fit was addedJonathan Wakely2-4/+4
This section can be misread to say that shrink_to_fit is available from GCC 3.4, but it was added later. libstdc++-v3/ChangeLog: * doc/xml/manual/strings.xml: Clarify that GCC 4.5 added std::string::shrink_to_fit. * doc/html/manual/strings.html: Regenerate.
2024-04-26libstdc++: Adjust whitespace in status tables in manualJonathan Wakely9-32/+32
This simplifies the changes needed after branching for a new release, so that new line breaks don't need to be introduced every time we branch. libstdc++-v3/ChangeLog: * doc/html/manual/status.html: Regenerate. * doc/xml/manual/status_cxx1998.xml: Adjust whitespace. * doc/xml/manual/status_cxx2011.xml: Likewise. * doc/xml/manual/status_cxx2014.xml: Likewise. * doc/xml/manual/status_cxx2017.xml: Likewise. * doc/xml/manual/status_cxx2020.xml: Likewise. * doc/xml/manual/status_cxx2023.xml: Likewise. * doc/xml/manual/status_cxxtr1.xml: Likewise. * doc/xml/manual/status_cxxtr24733.xml: Likewise.