Skip to content
Open
Show file tree
Hide file tree
Changes from 2 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
2 changes: 1 addition & 1 deletion libcxx/docs/Status/Cxx23Papers.csv
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
"`P2301R1 <https://wg21.link/P2301R1>`__","LWG","Add a ``pmr`` alias for ``std::stacktrace``","October 2021","",""
"`P2321R2 <https://wg21.link/P2321R2>`__","LWG","``zip``","October 2021","|In Progress|","","|ranges|"
"`P2340R1 <https://wg21.link/P2340R1>`__","LWG","Clarifying the status of the 'C headers'","October 2021","",""
"`P2393R1 <https://wg21.link/P2393R1>`__","LWG","Cleaning up ``integer``-class types","October 2021","",""
"`P2393R1 <https://wg21.link/P2393R1>`__","LWG","Cleaning up ``integer``-class types","October 2021","|Complete|","18.0"
Copy link
Member

Choose a reason for hiding this comment

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

Please add the paper to the release notes too.

Copy link
Contributor

@frederick-vs-ja frederick-vs-ja Jan 13, 2024

Choose a reason for hiding this comment

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

May be related: P2393R1 also superseded a related section in P2321R2.

| `[iterator.concept.winc] <https://wg21.link/iterator.concept.winc>`_, "Update weakly_comparable", None, Hui Xie, |Not Started|

I think we should say "Superseded by P2393R1" and/or "Nothing To Do" for the status about [iterator.concept.winc] in ZipProjects.csv. No change requested - ZipProjects.csv has been removed.

"`P2401R0 <https://wg21.link/P2401R0>`__","LWG","Add a conditional ``noexcept`` specification to ``std::exchange``","October 2021","|Complete|","14.0"
"","","","","","",""
"`P0323R12 <https://wg21.link/P0323R12>`__","LWG","``std::expected``","February 2022","|Complete|","16.0"
Expand Down
13 changes: 7 additions & 6 deletions libcxx/include/__ranges/counted.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,13 @@ namespace ranges::views {
namespace __counted {

struct __fn {
template<contiguous_iterator _It>
_LIBCPP_HIDE_FROM_ABI
static constexpr auto __go(_It __it, iter_difference_t<_It> __count)
noexcept(noexcept(span(std::to_address(__it), static_cast<size_t>(__count))))
// Deliberately omit return-type SFINAE, because to_address is not SFINAE-friendly
{ return span(std::to_address(__it), static_cast<size_t>(__count)); }
template <contiguous_iterator _It>
_LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_It __it, iter_difference_t<_It> __count) noexcept(
noexcept(span(std::to_address(__it), static_cast<size_t>(static_cast<iter_difference_t<_It>>(__count)))))
// Deliberately omit return-type SFINAE, because to_address is not SFINAE-friendly
{
return span(std::to_address(__it), static_cast<size_t>(static_cast<iter_difference_t<_It>>(__count)));
}

template<random_access_iterator _It>
_LIBCPP_HIDE_FROM_ABI
Expand Down
13 changes: 5 additions & 8 deletions libcxx/include/__ranges/subrange.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,15 +122,12 @@ namespace ranges {
: subrange(ranges::begin(__range), ranges::end(__range))
{ }

template<__different_from<subrange> _Range>
requires borrowed_range<_Range> &&
__convertible_to_non_slicing<iterator_t<_Range>, _Iter> &&
template <__different_from<subrange> _Range>
requires borrowed_range<_Range> && __convertible_to_non_slicing<iterator_t<_Range>, _Iter> &&
convertible_to<sentinel_t<_Range>, _Sent>
_LIBCPP_HIDE_FROM_ABI
constexpr subrange(_Range&& __range)
requires _StoreSize && sized_range<_Range>
: subrange(__range, ranges::size(__range))
{ }
_LIBCPP_HIDE_FROM_ABI constexpr subrange(_Range&& __range)
requires _StoreSize && sized_range<_Range>
: subrange(__range, static_cast<decltype(__size_)>(ranges::size(__range))) {}

template<borrowed_range _Range>
requires __convertible_to_non_slicing<iterator_t<_Range>, _Iter> &&
Expand Down
8 changes: 4 additions & 4 deletions libcxx/include/__ranges/take_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class take_view : public view_interface<take_view<_View>> {
return ranges::begin(__base_);
} else {
using _DifferenceT = range_difference_t<_View>;
auto __size = size();
auto __size = range_difference_t<_View>(size());
return counted_iterator(ranges::begin(__base_), static_cast<_DifferenceT>(__size));
}
} else {
Expand All @@ -102,7 +102,7 @@ class take_view : public view_interface<take_view<_View>> {
return ranges::begin(__base_);
} else {
using _DifferenceT = range_difference_t<const _View>;
auto __size = size();
auto __size = range_difference_t<_View>(size());
return counted_iterator(ranges::begin(__base_), static_cast<_DifferenceT>(__size));
}
} else {
Expand All @@ -114,7 +114,7 @@ class take_view : public view_interface<take_view<_View>> {
constexpr auto end() requires (!__simple_view<_View>) {
if constexpr (sized_range<_View>) {
if constexpr (random_access_range<_View>) {
return ranges::begin(__base_) + size();
return ranges::begin(__base_) + range_difference_t<_View>(size());
} else {
return default_sentinel;
}
Expand All @@ -127,7 +127,7 @@ class take_view : public view_interface<take_view<_View>> {
constexpr auto end() const requires range<const _View> {
if constexpr (sized_range<const _View>) {
if constexpr (random_access_range<const _View>) {
return ranges::begin(__base_) + size();
return ranges::begin(__base_) + range_difference_t<_View>(size());
} else {
return default_sentinel;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#ifndef LIBCPP_TEST_STD_ITERATORS_ITERATOR_REQUIREMENTS_ITERATOR_CONCEPTS_INCREMENTABLE_H
#define LIBCPP_TEST_STD_ITERATORS_ITERATOR_REQUIREMENTS_ITERATOR_CONCEPTS_INCREMENTABLE_H

#include <concepts>

struct postfix_increment_returns_void {
using difference_type = int;
postfix_increment_returns_void& operator++();
Expand Down Expand Up @@ -181,4 +183,12 @@ struct noncopyable_with_difference_type_and_minus {
bool operator==(noncopyable_with_difference_type_and_minus const&) const;
};

template <std::signed_integral T>
struct extended_integral_difference_type {
using difference_type = T;

extended_integral_difference_type& operator++();
void operator++(int);
};

#endif // #define LIBCPP_TEST_STD_ITERATORS_ITERATOR_REQUIREMENTS_ITERATOR_CONCEPTS_INCREMENTABLE_H
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <optional>

#include "../incrementable.h"
#include "test_macros.h"

static_assert(std::weakly_incrementable<int>);
static_assert(std::weakly_incrementable<int*>);
Expand Down Expand Up @@ -67,3 +68,134 @@ static_assert(std::weakly_incrementable<difference_type_and_void_minus>);
static_assert(std::weakly_incrementable<noncopyable_with_difference_type>);
static_assert(std::weakly_incrementable<noncopyable_without_difference_type>);
static_assert(std::weakly_incrementable<noncopyable_with_difference_type_and_minus>);

#if !defined(TEST_HAS_NO_INT128)
static_assert(std::weakly_incrementable<extended_integral_difference_type<__int128>>);
#endif

#if defined(__BIT_TYPES_DEFINED__)
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wbit-int-extension"
Comment on lines +76 to +78
Copy link
Member

Choose a reason for hiding this comment

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

Suggestion: use

TEST_DIAGNOSTIC_PUSH
TEST_GCC_DIAGNOSTIC_IGNORED(-Wbit-int-extension)

from test_macros.h. Non-blocking comment.

static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(8)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(9)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(10)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(11)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(12)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(13)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(14)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(15)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(16)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(17)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(18)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(19)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(20)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(21)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(22)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(23)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(24)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(25)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(26)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(27)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(28)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(29)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(30)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(31)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(32)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(33)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(34)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(35)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(36)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(37)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(38)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(39)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(40)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(41)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(42)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(43)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(44)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(45)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(46)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(47)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(48)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(49)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(50)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(51)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(52)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(53)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(54)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(55)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(56)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(57)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(58)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(59)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(60)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(61)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(62)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(63)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(64)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(65)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(66)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(67)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(68)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(69)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(70)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(71)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(72)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(73)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(74)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(75)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(76)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(77)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(78)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(79)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(80)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(81)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(82)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(83)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(84)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(85)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(86)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(87)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(88)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(89)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(90)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(91)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(92)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(93)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(94)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(95)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(96)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(97)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(98)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(99)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(100)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(101)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(102)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(103)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(104)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(105)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(106)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(107)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(108)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(109)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(110)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(111)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(112)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(113)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(114)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(115)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(116)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(117)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(118)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(119)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(120)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(121)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(122)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(123)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(124)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(125)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(126)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(127)>>);
static_assert(std::weakly_incrementable<extended_integral_difference_type<_BitInt(128)>>);
# pragma GCC diagnostic pop
#endif