Skip to content

[libc++] Update status page after the Tokyo meeting #87395

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
870 changes: 442 additions & 428 deletions libcxx/docs/FeatureTestMacroTable.rst

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions libcxx/docs/Status/Cxx2cIssues.csv
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,27 @@
"`3990 <https://wg21.link/LWG3990>`__","Program-defined specializations of ``std::tuple`` and ``std::variant`` can't be properly supported","Kona November 2023","","",""
"`4001 <https://wg21.link/LWG4001>`__","``iota_view`` should provide ``empty``","Kona November 2023","","","|ranges|"
"","","","","",""
"`3767 <https://wg21.link/LWG3767>`__","``codecvt<charN_t, char8_t, mbstate_t>`` incorrectly added to locale","Tokyo March 2024","","",""
"`3919 <https://wg21.link/LWG3919>`__","``enumerate_view`` may invoke UB for sized common non-forward underlying ranges","Tokyo March 2024","","","|ranges|"
"`3950 <https://wg21.link/LWG3950>`__","``std::basic_string_view`` comparison operators are overspecified","Tokyo March 2024","","",""
"`3975 <https://wg21.link/LWG3975>`__","Specializations of ``basic_format_context`` should not be permitted","Tokyo March 2024","","","|format|"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably "Nothing To Do". But I wonder whether some extension (if available) should be used for diagnostic.

"`3984 <https://wg21.link/LWG3984>`__","``ranges::to``'s recursion branch may be ill-formed","Tokyo March 2024","","","|ranges|"
"`4011 <https://wg21.link/LWG4011>`__","``""Effects: Equivalent to return""`` in ``[span.elem]``","Tokyo March 2024","","",""
"`4012 <https://wg21.link/LWG4012>`__","``common_view::begin/end`` are missing the ``simple-view`` check","Tokyo March 2024","","","|ranges|"
"`4013 <https://wg21.link/LWG4013>`__","``lazy_split_view::outer-iterator::value_type`` should not provide default constructor","Tokyo March 2024","","","|ranges|"
"`4016 <https://wg21.link/LWG4016>`__","container-insertable checks do not match what container-inserter does","Tokyo March 2024","","",""
"`4023 <https://wg21.link/LWG4023>`__","Preconditions of ``std::basic_streambuf::setg/setp``","Tokyo March 2024","","",""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"`4023 <https://wg21.link/LWG4023>`__","Preconditions of ``std::basic_streambuf::setg/setp``","Tokyo March 2024","","",""
"`4023 <https://wg21.link/LWG4023>`__","Preconditions of ``std::basic_streambuf::setg/setp``","Tokyo March 2024","|Nothing To Do|","",""

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I disagree with this one: we should add a _LIBCPP_ASSERT_FOO and a test.

"`4025 <https://wg21.link/LWG4025>`__","Move assignment operator of ``std::expected<cv void, E>`` should not be conditionally deleted","Tokyo March 2024","","",""
"`4030 <https://wg21.link/LWG4030>`__","Clarify whether arithmetic expressions in ``[numeric.sat.func]`` are mathematical or C++","Tokyo March 2024","","",""
"`4031 <https://wg21.link/LWG4031>`__","``bad_expected_access<void>`` member functions should be ``noexcept``","Tokyo March 2024","","",""
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These special member functions have been noexcept since originally implemented in 16.0 (thus either Complete or Nothing To Do). But test coverage seems missing.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will tackle separately, seems more complicated after looking into it.

"`4035 <https://wg21.link/LWG4035>`__","``single_view`` should provide ``empty``","Tokyo March 2024","","","|ranges|"
"`4036 <https://wg21.link/LWG4036>`__","``__alignof_is_defined`` is only implicitly specified in C++ and not yet deprecated","Tokyo March 2024","","",""
"`4037 <https://wg21.link/LWG4037>`__","Static data members of ``ctype_base`` are not yet required to be usable in constant expressions","Tokyo March 2024","","",""
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing actually needs to change, because (IIUC) libc++ only uses an integer type as the bitmask type, thus either Complete or Nothing To Do.

"`4038 <https://wg21.link/LWG4038>`__","``std::text_encoding::aliases_view`` should have constexpr iterators","Tokyo March 2024","","",""
"`4043 <https://wg21.link/LWG4043>`__","""ASCII"" is not a registered character encoding","Tokyo March 2024","","",""
"`4045 <https://wg21.link/LWG4045>`__","``tuple`` can create dangling references from ``tuple-like``","Tokyo March 2024","","",""
"`4053 <https://wg21.link/LWG4053>`__","Unary call to ``std::views::repeat`` does not decay the argument","Tokyo March 2024","","","|ranges|"
"`4054 <https://wg21.link/LWG4054>`__","Repeating a ``repeat_view`` should repeat the view","Tokyo March 2024","","","|ranges|"
"","","","","",""
"`3343 <https://wg21.link/LWG3343>`__","Ordering of calls to ``unlock()`` and ``notify_all()`` in Effects element of ``notify_all_at_thread_exit()`` should be reversed","Not Yet Adopted","|Complete|","16.0",""
"","","","","",""
17 changes: 17 additions & 0 deletions libcxx/docs/Status/Cxx2cPapers.csv
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,20 @@
"`P2264R7 <https://wg21.link/P2264R7>`__","LWG","Make ``assert()`` macro user friendly for C and C++","Kona November 2023","","",""
"`P1673R13 <https://wg21.link/P1673R13>`__","LWG","A free function linear algebra interface based on the BLAS","Kona November 2023","","",""
"","","","","","",""
"`P2875R4 <https://wg21.link/P2875R4>`__","LWG","Undeprecate ``polymorphic_allocator::destroy`` for C++26","Tokyo March 2024","","",""
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one seems to have been already implemented. Should it be Nothing to Do?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure whether we implemented it. Are you sure we just did not never deprecated it?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The implementations is just like the changes required by the paper:
https://isocpp.org/files/papers/P2875R4.pdf
image


I guess @philnik777 should know better?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we mention that LWG3036 is reverted by P2875R4 in Cxx23Issues.csv?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll mark LW3036 as "Reverted By P2875R4" and mark P2875R4 as "Done" since 15.0 (which I think is when we first shipped this).

"`P2867R2 <https://wg21.link/P2867R2>`__","LWG","Remove Deprecated ``strstreams`` From C++26","Tokyo March 2024","","",""
"`P2869R4 <https://wg21.link/P2869R4>`__","LWG","Remove Deprecated ``shared_ptr`` Atomic Access APIs from C++26","Tokyo March 2024","","",""
"`P2872R3 <https://wg21.link/P2872R3>`__","LWG","Remove ``wstring_convert`` From C++26","Tokyo March 2024","","",""
"`P3107R5 <https://wg21.link/P3107R5>`__","LWG","Permit an efficient implementation of ``std::print``","Tokyo March 2024","","","|format| |DR|"
"`P3142R0 <https://wg21.link/P3142R0>`__","LWG","Printing Blank Lines with ``println``","Tokyo March 2024","","","|format|"
"`P2845R8 <https://wg21.link/P2845R8>`__","LWG","Formatting of ``std::filesystem::path``","Tokyo March 2024","","","|format|"
"`P0493R5 <https://wg21.link/P0493R5>`__","LWG","Atomic minimum/maximum","Tokyo March 2024","","",""
"`P2542R8 <https://wg21.link/P2542R8>`__","LWG","``views::concat``","Tokyo March 2024","","","|ranges|"
"`P2591R5 <https://wg21.link/P2591R5>`__","LWG","Concatenation of strings and string views","Tokyo March 2024","","",""
"`P2248R8 <https://wg21.link/P2248R8>`__","LWG","Enabling list-initialization for algorithms","Tokyo March 2024","","",""
"`P2810R4 <https://wg21.link/P2810R4>`__","LWG","``is_debugger_present`` ``is_replaceable``","Tokyo March 2024","","",""
"`P1068R11 <https://wg21.link/P1068R11>`__","LWG","Vector API for random number generation","Tokyo March 2024","","",""
"`P2944R3 <https://wg21.link/P2944R3>`__","LWG","Comparisons for ``reference_wrapper``","Tokyo March 2024","","",""
"`P2642R6 <https://wg21.link/P2642R6>`__","LWG","Padded ``mdspan`` layouts","Tokyo March 2024","","",""
"`P3029R1 <https://wg21.link/P3029R1>`__","LWG","Better ``mdspan``'s CTAD","Tokyo March 2024","","",""
"","","","","","",""
17 changes: 17 additions & 0 deletions libcxx/include/version
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ __cpp_lib_atomic_flag_test 201907L <atomic>
__cpp_lib_atomic_float 201711L <atomic>
__cpp_lib_atomic_is_always_lock_free 201603L <atomic>
__cpp_lib_atomic_lock_free_type_aliases 201907L <atomic>
__cpp_lib_atomic_min_max 202403L <atomic>
__cpp_lib_atomic_ref 201806L <atomic>
__cpp_lib_atomic_shared_ptr 201711L <atomic>
__cpp_lib_atomic_value_initialization 201911L <atomic> <memory>
Expand Down Expand Up @@ -77,9 +78,14 @@ __cpp_lib_constexpr_tuple 201811L <tuple>
__cpp_lib_constexpr_typeinfo 202106L <typeinfo>
__cpp_lib_constexpr_utility 201811L <utility>
__cpp_lib_constexpr_vector 201907L <vector>
__cpp_lib_constrained_equality 202403L <optional> <tuple> <utility>
<variant>
__cpp_lib_copyable_function 202306L <functional>
__cpp_lib_coroutine 201902L <coroutine>
__cpp_lib_debugging 202311L <debugging>
__cpp_lib_default_template_type_for_algorithm_values 202403L <algorithm> <deque> <forward_list>
<list> <ranges> <string>
<vector>
__cpp_lib_destroying_delete 201806L <new>
__cpp_lib_enable_shared_from_this 201603L <memory>
__cpp_lib_endian 201907L <bit>
Expand All @@ -92,6 +98,7 @@ __cpp_lib_execution 201902L <execution>
__cpp_lib_expected 202211L <expected>
__cpp_lib_filesystem 201703L <filesystem>
__cpp_lib_format 202106L <format>
__cpp_lib_format_path 202403L <filesystem>
__cpp_lib_format_ranges 202207L <format>
__cpp_lib_format_uchar 202311L <format>
__cpp_lib_formatters 202302L <stacktrace> <thread>
Expand All @@ -107,6 +114,7 @@ __cpp_lib_freestanding_variant 202311L <variant>
__cpp_lib_fstream_native_handle 202306L <fstream>
__cpp_lib_function_ref 202306L <functional>
__cpp_lib_gcd_lcm 201606L <numeric>
__cpp_lib_generate_random 202403L <random>
__cpp_lib_generic_associative_lookup 201304L <map> <set>
__cpp_lib_generic_unordered_lookup 201811L <unordered_map> <unordered_set>
__cpp_lib_hardware_interference_size 201703L <new>
Expand Down Expand Up @@ -170,6 +178,7 @@ __cpp_lib_ranges_as_const 202207L <ranges>
__cpp_lib_ranges_as_rvalue 202207L <ranges>
__cpp_lib_ranges_chunk 202202L <ranges>
__cpp_lib_ranges_chunk_by 202202L <ranges>
__cpp_lib_ranges_concat 202403L <ranges>
__cpp_lib_ranges_contains 202207L <algorithm>
__cpp_lib_ranges_iota 202202L <numeric>
__cpp_lib_ranges_join_with 202202L <ranges>
Expand All @@ -185,6 +194,7 @@ __cpp_lib_ratio 202306L <ratio>
__cpp_lib_raw_memory_algorithms 201606L <memory>
__cpp_lib_rcu 202306L <rcu>
__cpp_lib_reference_from_temporary 202202L <type_traits>
__cpp_lib_reference_wrapper 202403L <functional>
__cpp_lib_remove_cvref 201711L <type_traits>
__cpp_lib_result_of_sfinae 201210L <functional> <type_traits>
__cpp_lib_robust_nonmodifying_seq_ops 201304L <algorithm>
Expand Down Expand Up @@ -448,6 +458,7 @@ __cpp_lib_within_lifetime 202306L <type_traits>
# define __cpp_lib_constexpr_memory 202202L
# define __cpp_lib_constexpr_typeinfo 202106L
# define __cpp_lib_expected 202211L
// # define __cpp_lib_format_path 202403L
# define __cpp_lib_format_ranges 202207L
// # define __cpp_lib_formatters 202302L
# define __cpp_lib_forward_like 202207L
Expand Down Expand Up @@ -486,13 +497,16 @@ __cpp_lib_within_lifetime 202306L <type_traits>

#if _LIBCPP_STD_VER >= 26
// # define __cpp_lib_associative_heterogeneous_insertion 202306L
// # define __cpp_lib_atomic_min_max 202403L
# undef __cpp_lib_bind_back
// # define __cpp_lib_bind_back 202306L
# undef __cpp_lib_bind_front
# define __cpp_lib_bind_front 202306L
# define __cpp_lib_bitset 202306L
// # define __cpp_lib_constrained_equality 202403L
// # define __cpp_lib_copyable_function 202306L
// # define __cpp_lib_debugging 202311L
// # define __cpp_lib_default_template_type_for_algorithm_values 202403L
// # define __cpp_lib_freestanding_algorithm 202311L
// # define __cpp_lib_freestanding_array 202311L
// # define __cpp_lib_freestanding_cstring 202306L
Expand All @@ -505,12 +519,15 @@ __cpp_lib_within_lifetime 202306L <type_traits>
# define __cpp_lib_fstream_native_handle 202306L
# endif
// # define __cpp_lib_function_ref 202306L
// # define __cpp_lib_generate_random 202403L
// # define __cpp_lib_hazard_pointer 202306L
// # define __cpp_lib_linalg 202311L
# undef __cpp_lib_out_ptr
// # define __cpp_lib_out_ptr 202311L
// # define __cpp_lib_ranges_concat 202403L
# define __cpp_lib_ratio 202306L
// # define __cpp_lib_rcu 202306L
// # define __cpp_lib_reference_wrapper 202403L
# define __cpp_lib_saturation_arithmetic 202311L
// # define __cpp_lib_smart_ptr_owner_equality 202306L
# define __cpp_lib_span_at 202311L
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,18 @@

// Test the feature test macros defined by <algorithm>

/* Constant Value
__cpp_lib_clamp 201603L [C++17]
__cpp_lib_constexpr_algorithms 201806L [C++20]
__cpp_lib_freestanding_algorithm 202311L [C++26]
__cpp_lib_parallel_algorithm 201603L [C++17]
__cpp_lib_ranges 202207L [C++20]
__cpp_lib_ranges_contains 202207L [C++23]
__cpp_lib_ranges_starts_ends_with 202106L [C++23]
__cpp_lib_robust_nonmodifying_seq_ops 201304L [C++14]
__cpp_lib_sample 201603L [C++17]
__cpp_lib_shift 201806L [C++20]
/* Constant Value
__cpp_lib_clamp 201603L [C++17]
__cpp_lib_constexpr_algorithms 201806L [C++20]
__cpp_lib_default_template_type_for_algorithm_values 202403L [C++26]
__cpp_lib_freestanding_algorithm 202311L [C++26]
__cpp_lib_parallel_algorithm 201603L [C++17]
__cpp_lib_ranges 202207L [C++20]
__cpp_lib_ranges_contains 202207L [C++23]
__cpp_lib_ranges_starts_ends_with 202106L [C++23]
__cpp_lib_robust_nonmodifying_seq_ops 201304L [C++14]
__cpp_lib_sample 201603L [C++17]
__cpp_lib_shift 201806L [C++20]
*/

#include <algorithm>
Expand All @@ -41,6 +42,10 @@
# error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
# endif

# ifdef __cpp_lib_default_template_type_for_algorithm_values
# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
# endif

# ifdef __cpp_lib_freestanding_algorithm
# error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
# endif
Expand Down Expand Up @@ -83,6 +88,10 @@
# error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
# endif

# ifdef __cpp_lib_default_template_type_for_algorithm_values
# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
# endif

# ifdef __cpp_lib_freestanding_algorithm
# error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
# endif
Expand Down Expand Up @@ -131,6 +140,10 @@
# error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
# endif

# ifdef __cpp_lib_default_template_type_for_algorithm_values
# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
# endif

# ifdef __cpp_lib_freestanding_algorithm
# error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
# endif
Expand Down Expand Up @@ -194,6 +207,10 @@
# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20"
# endif

# ifdef __cpp_lib_default_template_type_for_algorithm_values
# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
# endif

# ifdef __cpp_lib_freestanding_algorithm
# error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
# endif
Expand Down Expand Up @@ -263,6 +280,10 @@
# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++23"
# endif

# ifdef __cpp_lib_default_template_type_for_algorithm_values
# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
# endif

# ifdef __cpp_lib_freestanding_algorithm
# error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
# endif
Expand Down Expand Up @@ -338,6 +359,19 @@
# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++26"
# endif

# if !defined(_LIBCPP_VERSION)
# ifndef __cpp_lib_default_template_type_for_algorithm_values
# error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26"
# endif
# if __cpp_lib_default_template_type_for_algorithm_values != 202403L
# error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26"
# endif
# else // _LIBCPP_VERSION
# ifdef __cpp_lib_default_template_type_for_algorithm_values
# error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!"
# endif
# endif

# if !defined(_LIBCPP_VERSION)
# ifndef __cpp_lib_freestanding_algorithm
# error "__cpp_lib_freestanding_algorithm should be defined in c++26"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
__cpp_lib_atomic_float 201711L [C++20]
__cpp_lib_atomic_is_always_lock_free 201603L [C++17]
__cpp_lib_atomic_lock_free_type_aliases 201907L [C++20]
__cpp_lib_atomic_min_max 202403L [C++26]
__cpp_lib_atomic_ref 201806L [C++20]
__cpp_lib_atomic_shared_ptr 201711L [C++20]
__cpp_lib_atomic_value_initialization 201911L [C++20]
Expand Down Expand Up @@ -48,6 +49,10 @@
# error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20"
# endif

# ifdef __cpp_lib_atomic_min_max
# error "__cpp_lib_atomic_min_max should not be defined before c++26"
# endif

# ifdef __cpp_lib_atomic_ref
# error "__cpp_lib_atomic_ref should not be defined before c++20"
# endif
Expand Down Expand Up @@ -86,6 +91,10 @@
# error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20"
# endif

# ifdef __cpp_lib_atomic_min_max
# error "__cpp_lib_atomic_min_max should not be defined before c++26"
# endif

# ifdef __cpp_lib_atomic_ref
# error "__cpp_lib_atomic_ref should not be defined before c++20"
# endif
Expand Down Expand Up @@ -127,6 +136,10 @@
# error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20"
# endif

# ifdef __cpp_lib_atomic_min_max
# error "__cpp_lib_atomic_min_max should not be defined before c++26"
# endif

# ifdef __cpp_lib_atomic_ref
# error "__cpp_lib_atomic_ref should not be defined before c++20"
# endif
Expand Down Expand Up @@ -183,6 +196,10 @@
# error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++20"
# endif

# ifdef __cpp_lib_atomic_min_max
# error "__cpp_lib_atomic_min_max should not be defined before c++26"
# endif

# if !defined(_LIBCPP_VERSION)
# ifndef __cpp_lib_atomic_ref
# error "__cpp_lib_atomic_ref should be defined in c++20"
Expand Down Expand Up @@ -278,6 +295,10 @@
# error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++23"
# endif

# ifdef __cpp_lib_atomic_min_max
# error "__cpp_lib_atomic_min_max should not be defined before c++26"
# endif

# if !defined(_LIBCPP_VERSION)
# ifndef __cpp_lib_atomic_ref
# error "__cpp_lib_atomic_ref should be defined in c++23"
Expand Down Expand Up @@ -373,6 +394,19 @@
# error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++26"
# endif

# if !defined(_LIBCPP_VERSION)
# ifndef __cpp_lib_atomic_min_max
# error "__cpp_lib_atomic_min_max should be defined in c++26"
# endif
# if __cpp_lib_atomic_min_max != 202403L
# error "__cpp_lib_atomic_min_max should have the value 202403L in c++26"
# endif
# else // _LIBCPP_VERSION
# ifdef __cpp_lib_atomic_min_max
# error "__cpp_lib_atomic_min_max should not be defined because it is unimplemented in libc++!"
# endif
# endif

# if !defined(_LIBCPP_VERSION)
# ifndef __cpp_lib_atomic_ref
# error "__cpp_lib_atomic_ref should be defined in c++26"
Expand Down
Loading