Skip to content
Open
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
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>`__","Add a ``pmr`` alias for ``std::stacktrace``","2021-10 (Virtual)","","",""
"`P2321R2 <https://wg21.link/P2321R2>`__","``zip``","2021-10 (Virtual)","|In Progress|","",""
"`P2340R1 <https://wg21.link/P2340R1>`__","Clarifying the status of the 'C headers'","2021-10 (Virtual)","|Nothing To Do|","",""
"`P2393R1 <https://wg21.link/P2393R1>`__","Cleaning up ``integer``-class types","2021-10 (Virtual)","","",""
"`P2393R1 <https://wg21.link/P2393R1>`__","Cleaning up ``integer``-class types","2021-10 (Virtual)","|Complete|","21",""
Copy link
Contributor

Choose a reason for hiding this comment

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

I believe this paper should be a DR. But the meeting minutes (N4898) didn't say so, even thought it said some other LWG papers were DR, which was weird.

Do we want to additional say "this is implemented as a DR against C++20, MSVC STL does the same"? @timsong-cpp @ldionne

Also, now libcxx/docs/ReleaseNotes/21.rst needs to be changed.

"`P2401R0 <https://wg21.link/P2401R0>`__","Add a conditional ``noexcept`` specification to ``std::exchange``","2021-10 (Virtual)","|Complete|","14",""
"","","","","",""
"`P0323R12 <https://wg21.link/P0323R12>`__","``std::expected``","2022-02 (Virtual)","|Complete|","16",""
Expand Down
2 changes: 1 addition & 1 deletion libcxx/include/__ranges/subrange.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ class subrange : public view_interface<subrange<_Iter, _Sent, _Kind>> {
convertible_to<sentinel_t<_Range>, _Sent>
_LIBCPP_HIDE_FROM_ABI constexpr subrange(_Range&& __range)
requires _StoreSize && sized_range<_Range>
: subrange(__range, ranges::size(__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
4 changes: 2 additions & 2 deletions libcxx/include/__ranges/take_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ class take_view : public view_interface<take_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 @@ -134,7 +134,7 @@ class take_view : public view_interface<take_view<_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
Loading