aboutsummaryrefslogtreecommitdiff
path: root/libcxx/docs
AgeCommit message (Collapse)AuthorFilesLines
2025-06-25[libc++] P2944R3: Constrained comparisions - `variant` (#141396)Hristo Hristov1-1/+1
This is a follow-up and depends on #139368 being merged first. Implements [P2944R3](https://wg21.link/P2944R3) partially, which adds constrained comparisons to `std::variant` Closes #136769 Depends on #139368 # References [variant.relops](https://wg21.link/variant.relops)
2025-06-21[libc++] constexpr flat_map (#137453)Hui2-1/+2
Fixes #128673
2025-06-21[libc++] Implement `views::join_with` (#65536)Jakub Mazurkiewicz4-5/+8
* Implement "P2441R2 `views::join_with`" (https://wg21.link/P2441R2), closes #105185 * Implement LWG4074 (https://wg21.link/LWG4074), closes #105346 * Complete implementation of "P2711R1 Making multi-param constructors of views explicit" (https://wg21.link/P2711R1), closes #105252 * Complete implementation of "P2770R0 Stashing stashing iterators for proper flattening" (https://wg21.link/P2770R0), closes #105250
2025-06-18[libc++] Fix a typo in documentation (#144763)Kazu Hirata1-1/+1
2025-06-18[libc++] Optimize ranges::{for_each, for_each_n} for segmented iterators ↵Peng Liu1-2/+3
(#132896) Previously, the segmented iterator optimization was limited to `std::{for_each, for_each_n}`. This patch extends the optimization to `std::ranges::for_each` and `std::ranges::for_each_n`, ensuring consistent optimizations across these algorithms. This patch first generalizes the `std` algorithms by introducing a `Projection` parameter, which is set to `__identity` for the `std` algorithms. Then we let the `ranges` algorithms to directly call their `std` counterparts with a general `__proj` argument. Benchmarks demonstrate performance improvements of up to 21.4x for ``std::deque::iterator`` and 22.3x for ``join_view`` of ``vector<vector<char>>``. Addresses a subtask of #102817.
2025-06-18[libc++] Make list constexpr as part of P3372R3 (#129799)Peng Liu1-0/+2
This patch makes `std::list` constexpr as part of P3372R3. Fixes #128659.
2025-06-15[libc++] P2944R3: Constrained comparisons - update `reference_wrapper` ↵Hristo Hristov1-1/+1
implementation (#139368) Updates the implementation `std::reference_wrapper` - [P2944R3](https://wg21.link/P2944R3) as discussed in https://github.com/llvm/llvm-project/pull/117664#discussion_r1857826166 This PR also refactors the tests in preparation to implements the constrained comparisons for `optional`, `variant` etc. - Moves the test helpers (concepts and types) for testing constrained comparisons to `test_comparisons.h`. - Updates the `std::reference_wrapper` implementation to use the concept `__core_convertible_to<bool>` as per comments in #135759. Closes #138233 # References: - [refwrap.comparisons](https://wg21.link/refwrap.comparisons) --------- Co-authored-by: Hristo Hristov <zingam@outlook.com> Co-authored-by: Nikolas Klauser <nikolasklauser@berlin.de>
2025-06-12[libc++] Fix typos in documentation (#143912)Kazu Hirata1-6/+6
2025-06-12[libc++] Remove allocator support from std::function (#140395)Nikolas Klauser1-0/+5
The allocator support was removed in P0302R1, since it was impossible to implement. We're currently providing the API for this, but ignore the allocator in all cases but one (which is almost certainly an oversight). That case is the `function(allocator_arg_t, const Alloc&, Func)` constuctor. IMO we should remove the API entirely at a later date, but this only removes most of the code for now, leaving only the public functions. This not only simplifies the code quite a bit, but also results in the constructor being instantiated ~8x faster. Fixes #133901
2025-06-11[libc++] Upgrade to GCC 15 (#138293)Nikolas Klauser1-1/+1
2025-06-11[libc++] Make forward_list constexpr as part of P3372R3 (#129435)Peng Liu1-0/+2
Fixes #128658
2025-06-10[libc++] Document our ABI guarantees and what ABI flags exist to modify ↵Nikolas Klauser4-0/+218
these guarantees (#132615)
2025-06-04[libc++] Ensure strong exception guarantee for forward_list::resize (#131025)Peng Liu1-1/+1
The current implementation of `forward_list::resize` does not meet the strong exception safety guarantee required by [forward.list.modifiers]: If an exception is thrown by any of these member functions there is no effect on the container. This patch refactors `resize()` to provide strong exception safety and introduces additional tests to validate the strong exception guarantees for other `forward_list` modifiers. Fixes #118366.
2025-06-04[libc++] Disallow specializing `common_reference` (#141465)A. Jiang1-0/+2
`common_reference` isn't an exception for [meta.rqmts]/4, so it's better to disallow users to specialize it. `indirectly_readable.compile.pass.cpp` was a bit problematic. It attempted to opt-out common reference type in some wrong ways. Also, the standard effectively forbids opting-out common reference type for `T&` and `T&&`. This patch removes and adjusts some problematic cases. --------- Co-authored-by: Nikolas Klauser <nikolasklauser@berlin.de>
2025-06-04[libc++] constexpr priority_queue (#140634)Peng Liu1-0/+2
This patch makes `priority_queue` constexpr as part of P3372R3. Fixes #128671.
2025-05-28[libcxx][docs] Fix bullet point in Additional Tools sectionDavid Spickett1-0/+1
Without a blank line after the ":", it was rendered on the same line instead of a new one.
2025-05-21[libc++] Optimize bitset::to_string (#128832)Peng Liu1-0/+3
This patch optimizes `bitset::to_string` by replacing the existing bit-by-bit processing with a more efficient bit traversal strategy. Instead of checking each bit sequentially, we leverage `std::__countr_zero` to efficiently locate the next set bit, skipping over consecutive zero bits. This greatly accelerates the conversion process, especially for sparse `bitset`s where zero bits dominate. To ensure similar improvements for dense `bitset`s, we exploit symmetry by inverting the bit pattern, allowing us to apply the same optimized traversal technique. Even for uniformly distributed `bitset`s, the proposed approach offers measurable performance gains over the existing implementation. Benchmarks demonstrate substantial improvements, achieving up to 13.5x speedup for sparse `bitset`s with `Pr(true bit) = 0.1`, 16.1x for dense `bitset`s with `Pr(true bit) = 0.9`, and 8.3x for uniformly distributed `bitset`s with `Pr(true bit) = 0.5)`.
2025-05-21[libc++] Optimize std::for_each_n for segmented iterators (#135468)Peng Liu1-0/+3
This patch enhances the performance of `std::for_each_n` when used with segmented iterators, leading to significant performance improvements, summarized in the tables below. This addresses a subtask of https://github.com/llvm/llvm-project/issues/102817.
2025-05-19[libc++] Optimize std::getline (#121346)Nikolas Klauser1-0/+2
``` ----------------------------------------------- Benchmark old new ----------------------------------------------- BM_getline_string 318 ns 32.4 ns ```
2025-05-15[libc++] Fix typos in documentation (#139853)Kazu Hirata3-12/+12
2025-05-14[libc++] Remove the constexpr `hash<vector<bool>>` extension (#132617)A. Jiang1-0/+3
libc++ makes the `hash<vector<bool, A>>::operator()` `constexpr` since C++20, which is a conforming extension, but it was unintended. This patch removes the extension, with an escape hatch macro for it, and the escape hatch will be removed in the future. Test cases for `constexpr` along with the assumption of hash values are moved to the `libcxx/test/libcxx/` subdirectory. --------- Co-authored-by: Louis Dionne <ldionne.2@gmail.com>
2025-05-12[libc++] Documentation polish (#132962)Martin Licht5-86/+87
- Some lists re-ordered alphabetically - Spelling, grammar, language, etc
2025-05-07[libc++] Implement P3379R0 Constrain `std::expected` equality operators ↵yronglin1-1/+1
(#135759) Closes #118135 Co-authored-by: A. Jiang <de34@live.cn>
2025-05-07[libc++][docs] Confirm that P3136R1 Retiring niebloids is Complete (#135932)A. Jiang1-1/+1
As libc++ has been implementing niebloids as CPOs since LLVM 14 due to https://reviews.llvm.org/D116570. Also changes some comments in test files to use the formal term "algorithm function object". Closes #118133.
2025-05-07[libc++] Reword release note section about future releases (#138544)Louis Dionne1-10/+5
For several releases, we had a section in the release notes that was called "Upcoming Deprecations and Removals". That section was used to advertize breaking changes in future releases as opposed to ones in the current release. However, the way this section was worded and organized made it unclear what release these announcements related to. This patch rewords that section of the release notes to make it less ambiguous and moves items that aren't done yet (but relate to the ongoing release) to a different section with a TODO.
2025-05-05[libc++] Re-introduce _LIBCPP_DISABLE_AVAILABILITY (#134158)Louis Dionne1-3/+0
The `_LIBCPP_DISABLE_AVAILABILITY` macro was removed in afae1a5f32bb as an intended no-op. It turns out that some projects are making use of that macro to work around a Clang bug with availability annotations that still exists: https://github.com/llvm/llvm-project/issues/134151. Since that Clang bug still hasn't been fixed, I feel that we must sill honor that unfortunate macro until we've figured out how to get rid of it without breaking code.
2025-04-29[libc++][pair] P2944R3: Constrain `std::pair`'s equality operator (#136672)Hristo Hristov1-1/+1
Implements https://wg21.link/P2944R3 (partially): - [pairs.spec](https://eel.is/c++draft/pairs.spec) Related issues: - Related to #105424 - Related to #118135 - PR https://github.com/llvm/llvm-project/pull/135759 - PR https://github.com/llvm/llvm-project/pull/117664 Closes: [#136763](https://github.com/llvm/llvm-project/issues/136763) # References - https://eel.is/c++draft/concept.booleantestable - https://eel.is/c++draft/concept.equalitycomparable --------- Co-authored-by: Hristo Hristov <zingam@outlook.com> Co-authored-by: Nikolas Klauser <nikolasklauser@berlin.de>
2025-04-19[libc++] Backport segmented iterator optimization for std::for_each to C++11 ↵Peng Liu1-0/+3
(#134960) Previously, the segmented iterator optimization for `std::for_each` was restricted to C++23 and later due to its dependency on `__movable_box`, which is not available in earlier standards. This patch eliminates that restriction, enabling consistent optimizations starting from C++11. By backporting this enhancement, we improve performance across older standards and create opportunities to extend similar optimizations to other algorithms by forwarding their calls to `std::for_each`.
2025-04-18[libc++] Make __config_site modular (#134699)Louis Dionne1-1/+1
This patch makes the __config_site header modular, which solves various problems with non-modular headers. This requires going back to generating the modulemap file, since we only know how to make __config_site modular when we're not using the per-target runtime dir. The patch also adds a test that we support -Wnon-modular-include-in-module, which warns about non-modular includes from modules. --------- Co-authored-by: Konstantin Varlamov <varconst@apple.com>
2025-04-16[libc++] Extend the scope of radix sorting inside std::stable_sort to ↵Дмитрий Изволов1-0/+3
floating-point types (#129452) These changes speed up `std::stable_sort` in the case of sorting floating-point types. This applies only to IEEE 754 floats. The speedup is similar to that achieved for integers in PR #104683 (see benchmarks below). Why does this worth doing? Previously, `std::stable_sort` had almost no chance of beating `std::sort`. Now there are cases when `std::stable_sort` is preferrable, and the difference is significant. ``` --------------------------------------------------------------------------- Benchmark | std::stable_sort | std::sort | std::stable_sort | without radix_sort | | with radix_sort --------------------------------------------------------------------------- float_Random_1 | 1.62 ns | 2.15 ns | 1.61 ns float_Random_4 | 18.0 ns | 2.71 ns | 16.3 ns float_Random_16 | 118 ns | 113 ns | 112 ns float_Random_64 | 751 ns | 647 ns | 730 ns float_Random_256 | 4715 ns | 2937 ns | 4669 ns float_Random_1024 | 25713 ns | 13172 ns | 5959 ns <-- float_Random_4096 | 131307 ns | 56870 ns | 19294 ns <-- float_Random_16384 | 624996 ns | 242953 ns | 64264 ns <-- float_Random_65536 | 2895661 ns | 1027279 ns | 288553 ns <-- float_Random_262144 | 13285372 ns | 4342593 ns | 3022377 ns <-- float_Random_1048576 | 60595871 ns | 19087591 ns | 18690457 ns <-- float_Random_2097152 | 131336117 ns | 38800396 ns | 52325016 ns float_Random_4194304 | 270043042 ns | 79978019 ns | 102907726 ns double_Random_1 | 1.60 ns | 2.15 ns | 1.61 ns double_Random_4 | 15.2 ns | 2.70 ns | 16.9 ns double_Random_16 | 104 ns | 112 ns | 119 ns double_Random_64 | 712 ns | 614 ns | 755 ns double_Random_256 | 4496 ns | 2966 ns | 4820 ns double_Random_1024 | 24722 ns | 12679 ns | 6189 ns <-- double_Random_4096 | 126075 ns | 54484 ns | 20999 ns <-- double_Random_16384 | 613782 ns | 232557 ns | 110276 ns <-- double_Random_65536 | 2894972 ns | 988531 ns | 774302 ns <-- double_Random_262144 | 13460273 ns | 4278059 ns | 5115123 ns double_Random_1048576 | 61119996 ns | 18408462 ns | 27166574 ns double_Random_2097152 | 132511525 ns | 37986158 ns | 54423869 ns double_Random_4194304 | 272949862 ns | 77912616 ns | 147670834 ns ``` Comparison for only `std::stable_sort`: ``` Benchmark Time Time Old Time New -------------------------------------------------------------------------------------------------- BM_StableSort_float_Random_1024 -0.7997 25438 5096 BM_StableSort_float_Random_4096 -0.8731 128157 16260 BM_StableSort_float_Random_16384 -0.9024 621271 60623 BM_StableSort_float_Random_65536 -0.9081 2922413 268619 BM_StableSort_float_Random_262144 -0.7766 13386345 2990408 BM_StableSort_float_Random_1048576 -0.6954 60673010 18481751 BM_StableSort_float_Random_2097152 -0.6026 130977358 52052182 BM_StableSort_float_Random_4194304 -0.6252 271556583 101770500 BM_StableSort_float_Ascending_1024 -0.6430 6711 2396 BM_StableSort_float_Ascending_4096 -0.7979 38460 7773 BM_StableSort_float_Ascending_16384 -0.8471 191069 29222 BM_StableSort_float_Ascending_65536 -0.8683 882321 116194 BM_StableSort_float_Ascending_262144 -0.8346 3868552 639937 BM_StableSort_float_Ascending_1048576 -0.7460 16521233 4195953 BM_StableSort_float_Ascending_2097152 -0.5439 21757532 9922776 BM_StableSort_float_Ascending_4194304 -0.7525 67847496 16791582 BM_StableSort_float_Descending_1024 -0.6359 15038 5475 BM_StableSort_float_Descending_4096 -0.7090 62810 18278 BM_StableSort_float_Descending_16384 -0.7763 311844 69750 BM_StableSort_float_Descending_65536 -0.7228 1270513 352202 BM_StableSort_float_Descending_262144 -0.6785 5484173 1763045 BM_StableSort_float_Descending_1048576 -0.5084 20223149 9941852 BM_StableSort_float_Descending_2097152 -0.7646 60523254 14247014 BM_StableSort_float_Descending_4194304 -0.5638 95706839 41748858 BM_StableSort_float_SingleElement_1024 +0.3715 1732 2375 BM_StableSort_float_SingleElement_4096 -0.1685 9357 7781 BM_StableSort_float_SingleElement_16384 -0.3793 47307 29362 BM_StableSort_float_SingleElement_65536 -0.4925 227666 115536 BM_StableSort_float_SingleElement_262144 -0.4271 1075853 616387 BM_StableSort_float_SingleElement_1048576 -0.3736 5097599 3193279 BM_StableSort_float_SingleElement_2097152 -0.2470 9854161 7420158 BM_StableSort_float_SingleElement_4194304 -0.3384 22175964 14670720 BM_StableSort_float_PipeOrgan_1024 -0.4885 10664 5455 BM_StableSort_float_PipeOrgan_4096 -0.6340 50095 18337 BM_StableSort_float_PipeOrgan_16384 -0.7078 238700 69739 BM_StableSort_float_PipeOrgan_65536 -0.6740 1102419 359378 BM_StableSort_float_PipeOrgan_262144 -0.7460 4698739 1193511 BM_StableSort_float_PipeOrgan_1048576 -0.5657 18493972 8032392 BM_StableSort_float_PipeOrgan_2097152 -0.7116 41089206 11850349 BM_StableSort_float_PipeOrgan_4194304 -0.6650 83445011 27955737 BM_StableSort_float_QuickSortAdversary_1024 -0.6863 17402 5460 BM_StableSort_float_QuickSortAdversary_4096 -0.7715 79864 18247 BM_StableSort_float_QuickSortAdversary_16384 -0.7800 317480 69839 BM_StableSort_float_QuickSortAdversary_65536 -0.7400 1357601 352967 BM_StableSort_float_QuickSortAdversary_262144 -0.6450 5662094 2009769 BM_StableSort_float_QuickSortAdversary_1048576 -0.5092 21173627 10392107 BM_StableSort_float_QuickSortAdversary_2097152 -0.7333 61748178 16469993 BM_StableSort_float_QuickSortAdversary_4194304 -0.5607 98459863 43250182 BM_StableSort_double_Random_1024 -0.7657 24769 5802 BM_StableSort_double_Random_4096 -0.8441 126449 19717 BM_StableSort_double_Random_16384 -0.8269 614910 106447 BM_StableSort_double_Random_65536 -0.7413 2905000 751427 BM_StableSort_double_Random_262144 -0.6287 13449514 4994348 BM_StableSort_double_Random_1048576 -0.5635 60863246 26568349 BM_StableSort_double_Random_2097152 -0.5959 130293892 52654532 BM_StableSort_double_Random_4194304 -0.4772 272616445 142526267 BM_StableSort_double_Ascending_1024 -0.4870 6757 3466 BM_StableSort_double_Ascending_4096 -0.7360 37592 9923 BM_StableSort_double_Ascending_16384 -0.7971 183967 37324 BM_StableSort_double_Ascending_65536 -0.7465 897116 227398 BM_StableSort_double_Ascending_262144 -0.6764 4020980 1301033 BM_StableSort_double_Ascending_1048576 -0.6407 16421799 5900751 BM_StableSort_double_Ascending_2097152 -0.6380 29347139 10622419 BM_StableSort_double_Ascending_4194304 -0.5934 70439925 28644185 BM_StableSort_double_Descending_1024 -0.5988 15216 6105 BM_StableSort_double_Descending_4096 -0.6857 65069 20449 BM_StableSort_double_Descending_16384 -0.6922 329321 101381 BM_StableSort_double_Descending_65536 -0.7038 1367970 405242 BM_StableSort_double_Descending_262144 -0.6472 5361644 1891429 BM_StableSort_double_Descending_1048576 -0.6656 22031404 7366459 BM_StableSort_double_Descending_2097152 -0.7593 68922467 16591242 BM_StableSort_double_Descending_4194304 -0.6392 96283643 34743223 BM_StableSort_double_SingleElement_1024 +0.9128 1895 3625 BM_StableSort_double_SingleElement_4096 +0.1475 10013 11490 BM_StableSort_double_SingleElement_16384 -0.1901 52382 42424 BM_StableSort_double_SingleElement_65536 -0.2096 254698 201313 BM_StableSort_double_SingleElement_262144 -0.1833 1248478 1019648 BM_StableSort_double_SingleElement_1048576 -0.1741 5703397 4710603 BM_StableSort_double_SingleElement_2097152 -0.1751 10922197 9009835 BM_StableSort_double_SingleElement_4194304 -0.1538 26571923 22485137 BM_StableSort_double_PipeOrgan_1024 -0.4406 10752 6014 BM_StableSort_double_PipeOrgan_4096 -0.5917 49456 20195 BM_StableSort_double_PipeOrgan_16384 -0.6258 270515 101221 BM_StableSort_double_PipeOrgan_65536 -0.7098 1159462 336457 BM_StableSort_double_PipeOrgan_262144 -0.6591 4735711 1614433 BM_StableSort_double_PipeOrgan_1048576 -0.6620 19353110 6541172 BM_StableSort_double_PipeOrgan_2097152 -0.7288 49131812 13323391 BM_StableSort_double_PipeOrgan_4194304 -0.5988 81958974 32878171 BM_StableSort_double_QuickSortAdversary_1024 -0.6516 17948 6254 BM_StableSort_double_QuickSortAdversary_4096 -0.7527 82359 20363 BM_StableSort_double_QuickSortAdversary_16384 -0.7009 340410 101811 BM_StableSort_double_QuickSortAdversary_65536 -0.6854 1487480 467928 BM_StableSort_double_QuickSortAdversary_262144 -0.6386 5648460 2041377 BM_StableSort_double_QuickSortAdversary_1048576 -0.6127 22859142 8852587 BM_StableSort_double_QuickSortAdversary_2097152 -0.7161 68693975 19499381 BM_StableSort_double_QuickSortAdversary_4194304 -0.5909 95532179 39077491 OVERALL_GEOMEAN -0.6472 0 0 ```
2025-04-14[libc++] Implement P2897R7 aligned_accessor: An mdspan accessor expressing ↵Damien L-G3-1/+6
pointer over-alignment (#122603) Closes #118372
2025-04-14[libc++] Removes the _LIBCPP_VERBOSE_ABORT_NOT_NOEXCEPT macro. (#135494)Mark de Wever1-3/+3
This makes __libcpp_verbose_abort unconditionally noexcept. This was planned for the upcomming release.
2025-04-12[libc++][doc] Updates the release notes.Mark de Wever1-0/+17
Copies the not-yet-implemented items planned for removal from the LLVM-20 to the LLVM-21 release notes. This allows to better keep track of the status of the next release.
2025-04-11Reapply "[libc++] Optimize num_put integral functions" (#131613) (#133572)Nikolas Klauser1-0/+8
This reverts commit d1156fcb56891fb1a426c3e8331a51d47f98a1b8. This patch fixes the reported incorrect formatting changes and adds tests for them. The performance should be unaffected, since there are no significant changes required to fix the bugs. Specifically, a `>` was changed to a `>=` to also add a `+` in the zero case, and we're checking for zero now before printing the octal and hexadecimal prefixes. Closes #131710
2025-04-10[libc++][doc] Removes LLVM 19 Release Notes. (#134894)Mark de Wever2-255/+0
There will be no more LLVM-19 releases so we will not backport patches for this release. This makes these Release Notes obsolete.
2025-04-09[libc++] Remove _LIBCPP_TEMPLATE_VIS (#134885)Nikolas Klauser1-14/+2
The need for `_LIBCPP_TEMPLATE_VIS` has been removed in #133233.
2025-04-09[libc++] P3247R2: Deprecate `is_trivial(_v)` (#130573)A. Jiang2-1/+4
Requirements on character-like types are updated unconditionally, because `basic_string` does requires the default-constructibility. It might be possible to make `basic_string_view` support classes with non-public trivial default constructor, but this doesn't seem sensible. libcxxabi's `ItaniumDemangle.h` is also updated to avoid deprecated features.
2025-04-08[libc++] Remove _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS (#111964)Nikolas Klauser1-29/+0
This macro isn't required if we define all the functions inline. In fact, quite a few of the marked functions have already been inlined. This patch basically only moves code around and adds `_LIBCPP_HIDE_FROM_ABI` to the places where it's been missing so far. This also removes inlining hints, since it dropps `inline` in some places, but that shouldn't make much of a difference. The functions tend to be either really small, so should be inlined anyways, or are big enough that they shouldn't be inlined even with an inlinehint.
2025-04-06[libc++] Implement `std::flat_multiset` (#128363)Hui3-3/+3
fixes https://github.com/llvm/llvm-project/issues/105193
2025-04-05[libc++] Implement ranges::iota (#68494)James E T Smith3-3/+3
# Overview As a disclaimer, this is my first PR to LLVM and while I've tried to ensure I've followed the LLVM and libc++ contributing guidelines, there's probably a good chance I missed something. If I have, just let me know and I'll try to correct it as soon as I can. This PR implements `std::ranges::iota` and `std::ranges::out_value_result` outlined in [P2440r1](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2440r1.html). As outlined in the paper above, I've: - Implemented `out_value_result` and added to `<algorithm>` - Added `out_value_result`, `iota_result`, and two overloads of `iota` to `std::ranges` in `<numeric>` - Updated the version macro `__cpp_lib_ranges_iota` in `<version>` I've also added tests for `ranges::iota` and `ranges::out_value_result`. Lastly, I added those structs to the appropriate module files. Partially implements #105184 EDIT: Forgot to mention in the original post, thanks to @hawkinsw for taking a look at a preliminary version of this PR! # TODOs - [x] Updating the range [status doc](https://github.com/jamesETsmith/llvm-project/blob/main/libcxx/docs/Status/RangesMajorFeatures.csv) - [x] Ensure all comments from https://reviews.llvm.org/D121436 are addressed here - [X] EDIT (I'll do this in a separate PR). ~~I'm open to implementing the rest of P2440r1 (`ranges::shift_left` and `ranges::shift_right`) if that's ok, I just wanted to get feedback on `ranges::iota` first~~ - [x] I've been having trouble building the modules locally and want to make sure that's working properly Closes: #134060
2025-04-03[libc++] Add missing release note for LLVM 20 about zip_view (#134144)Louis Dionne1-0/+11
We should have had a release note in LLVM 20 about implementing P2165R4 since that is technically an ABI and API break for zip_view. We don't expect anyone to actually hit the ABI issue, but we've come across some (fairly small) breakage due to the API change, so this should at least be mentioned in the release notes.
2025-04-02[libc++] Add visibility annotations to the std namespace with GCC (#133233)Nikolas Klauser1-1/+4
This allows us to remove the need for `_LIBCPP_TEMPLATE_VIS` and fixes a bunch of missing annotations for RTTI when used across dylib boundaries. `_LIBCPP_TEMPLATE_VIS` itself will be removed in a separate patch, since it touches a lot of code. This patch is a no-op for Clang. Only GCC is affected.
2025-03-27[libc++] Remove official Clang 18 support. (#130142)Mark de Wever1-1/+1
Since Clang 20 has been release we no longer support Clang 18 per our policy. Note the Clang 18 workarounds will be removed in a follow-up patch.
2025-03-26[libc++] Verify std::forward_like's mandates clause. (#127318)Mark de Wever1-1/+1
The existing using _ForwardLike declaration already fails with a subsitution failure. The LWG issue was filed to clarify what should happen for non-referencable types. Added test to verify libc++ is already enforcing the new Mandates. Implements: - LWG3757 What's the effect of std::forward_like<void>(x) Closes: #105026
2025-03-25[libc++] Update the status for LWG3120 (#116772)Peng Xie1-1/+1
The current implementation already have an __initial_descriptor which saves the initial state. When release() is called, we will reset the __initial_descriptor.__cur_ pointer. This patch also updates the status of LWG3120. Closes #104274 --------- Co-authored-by: Louis Dionne <ldionne.2@gmail.com>
2025-03-26[libc++] Re-implement LWG2770 again * 2 (#132598)A. Jiang1-0/+1
1013fe3c0cfd7582e94ef2d4bfd79da7ea1a1289 used to implement LWG2770, but cb0d4df97490ec2d2b1cdf7574d26b1bc4063599 made LWG2770 unimplemented again because of CWG2386. This patch re-implements LWG2770, while keeping the libc++-specific implementation strategy (which is controversial as noted in LWG4040). Drive-by: - Make the test coverage for the controversial part noted in LWG4040 libc++-only. - Add the previously missed entry for LWG2770 to the documentation.
2025-03-25[libcxx] Put `std::monostate` in `<utility>` (#128373)Amr Hesham2-1/+2
Fixes: #127874
2025-03-24[libc++] Documentation for _LIBCPP_REMOVE_TRANSITIVE_INCLUDES (#130560)Martin Licht1-0/+22
Closes #130486 --------- Co-authored-by: Louis Dionne <ldionne.2@gmail.com>
2025-03-23[libc++] Add [[gnu::nodebug]] on type traits (#128502)Nikolas Klauser1-1/+2
2025-03-23[libc++] implement std::flat_set (#125241)Hui2-1/+2
Co-authored-by: Louis Dionne <ldionne.2@gmail.com>