Skip to content

Commit 41f7bb9

Browse files
committed
[libc++][chrono] Uses operator<=> in the calendar.
Since the calendar is added in C++20 the existing operators are removed. Implements part of: - P1614R2 The Mothership has Landed Reviewed By: #libc, ldionne Differential Revision: https://reviews.llvm.org/D129887
1 parent f6a7d7e commit 41f7bb9

File tree

12 files changed

+276
-393
lines changed

12 files changed

+276
-393
lines changed

libcxx/docs/Status/SpaceshipProjects.csv

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,31 +51,28 @@ Section,Description,Dependencies,Assignee,Complete
5151
| `[range.iota.iterator] <https://wg21.link/range.iota.iterator>`_,| ranges::iota_view::iterator,[concepts.cmp],Unassigned,|Not Started|
5252
| `[range.transform.iterator] <https://wg21.link/range.transform.iterator>`_,| ranges::transform_view::iterator,[concepts.cmp],Unassigned,|Not Started|
5353
| `[range.elements.iterator] <https://wg21.link/range.elements.iterator>`_,| ranges::elements_view::iterator,[concepts.cmp],Unassigned,|Not Started|
54-
"| `[time.duration.comparisons] <https://wg21.link/time.duration.comparisons>`_
55-
| `[time.point.comparisons] <https://wg21.link/time.point.comparisons>`_
56-
| `[time.cal.day.nonmembers] <https://wg21.link/time.cal.day.nonmembers>`_
54+
| `[time.duration.comparisons] <https://wg21.link/time.duration.comparisons>`_, "chrono::duration", None, Mark de Wever, |Not Started|
55+
| `[time.point.comparisons] <https://wg21.link/time.point.comparisons>`_, "chrono::point", None, Mark de Wever, |Not Started|
56+
"| `[time.cal.day.nonmembers] <https://wg21.link/time.cal.day.nonmembers>`_
5757
| `[time.cal.month.nonmembers] <https://wg21.link/time.cal.month.nonmembers>`_
5858
| `[time.cal.year.nonmembers] <https://wg21.link/time.cal.year.nonmembers>`_
5959
| `[time.cal.md.nonmembers] <https://wg21.link/time.cal.md.nonmembers>`_
6060
| `[time.cal.mdlast] <https://wg21.link/time.cal.mdlast>`_
6161
| `[time.cal.ym.nonmembers] <https://wg21.link/time.cal.ym.nonmembers>`_
6262
| `[time.cal.ymd.nonmembers] <https://wg21.link/time.cal.ymd.nonmembers>`_
63-
| `[time.cal.ymdlast.nonmembers] <https://wg21.link/time.cal.ymdlast.nonmembers>`_
64-
| `[time.zone.nonmembers] <https://wg21.link/time.zone.nonmembers>`_
65-
| `[time.zone.leap.nonmembers] <https://wg21.link/time.zone.leap.nonmembers>`_
66-
| `[time.zone.link.nonmembers] <https://wg21.link/time.zone.link.nonmembers>`_","| chrono::duration
67-
| chrono::time_point
68-
| chrono::day
63+
| `[time.cal.ymdlast.nonmembers] <https://wg21.link/time.cal.ymdlast.nonmembers>`_","| chrono::day
6964
| chrono::month
7065
| chrono::year
7166
| chrono::month_day
7267
| chrono::month_day_last
7368
| chrono::year_month
7469
| chrono::year_month_day
75-
| chrono::year_month_day_last
76-
| chrono::time_zone
70+
| chrono::year_month_day_last",None,Mark de Wever,|Complete|
71+
"| `[time.zone.nonmembers] <https://wg21.link/time.zone.nonmembers>`_
72+
| `[time.zone.leap.nonmembers] <https://wg21.link/time.zone.leap.nonmembers>`_
73+
| `[time.zone.link.nonmembers] <https://wg21.link/time.zone.link.nonmembers>`_","| chrono::time_zone
7774
| chrono::leap_second
78-
| chrono::time_zone_link",None,Unassigned,|Not Started|
75+
| chrono::time_zone_link",A ``<chrono>`` implementation,Unassigned,|Not Started|
7976
| `[fs.path.nonmember] <https://wg21.link/fs.path.nonmember>`_,| filesystem::path,None,Unassigned,|Not Started|
8077
| `[fs.dir.entry.obs] <https://wg21.link/fs.dir.entry.obs>`_,| filesystem::directory_entry,None,Unassigned,|Not Started|
8178
| `[re.submatch.op] <https://wg21.link/re.submatch.op>`_,| sub_match,None,Unassigned,|Not Started|

libcxx/include/__chrono/month.h

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include <__chrono/duration.h>
1414
#include <__config>
15+
#include <compare>
1516

1617
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1718
# pragma GCC system_header
@@ -45,25 +46,9 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr
4546
bool operator==(const month& __lhs, const month& __rhs) noexcept
4647
{ return static_cast<unsigned>(__lhs) == static_cast<unsigned>(__rhs); }
4748

48-
_LIBCPP_HIDE_FROM_ABI inline constexpr
49-
bool operator!=(const month& __lhs, const month& __rhs) noexcept
50-
{ return !(__lhs == __rhs); }
51-
52-
_LIBCPP_HIDE_FROM_ABI inline constexpr
53-
bool operator< (const month& __lhs, const month& __rhs) noexcept
54-
{ return static_cast<unsigned>(__lhs) < static_cast<unsigned>(__rhs); }
55-
56-
_LIBCPP_HIDE_FROM_ABI inline constexpr
57-
bool operator> (const month& __lhs, const month& __rhs) noexcept
58-
{ return __rhs < __lhs; }
59-
60-
_LIBCPP_HIDE_FROM_ABI inline constexpr
61-
bool operator<=(const month& __lhs, const month& __rhs) noexcept
62-
{ return !(__rhs < __lhs); }
63-
64-
_LIBCPP_HIDE_FROM_ABI inline constexpr
65-
bool operator>=(const month& __lhs, const month& __rhs) noexcept
66-
{ return !(__lhs < __rhs); }
49+
_LIBCPP_HIDE_FROM_ABI constexpr strong_ordering operator<=>(const month& __lhs, const month& __rhs) noexcept {
50+
return static_cast<unsigned>(__lhs) <=> static_cast<unsigned>(__rhs);
51+
}
6752

6853
_LIBCPP_HIDE_FROM_ABI inline constexpr
6954
month operator+ (const month& __lhs, const months& __rhs) noexcept

libcxx/include/__chrono/monthday.h

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <__chrono/day.h>
1515
#include <__chrono/month.h>
1616
#include <__config>
17+
#include <compare>
1718

1819
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1920
# pragma GCC system_header
@@ -58,9 +59,11 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr
5859
bool operator==(const month_day& __lhs, const month_day& __rhs) noexcept
5960
{ return __lhs.month() == __rhs.month() && __lhs.day() == __rhs.day(); }
6061

61-
_LIBCPP_HIDE_FROM_ABI inline constexpr
62-
bool operator!=(const month_day& __lhs, const month_day& __rhs) noexcept
63-
{ return !(__lhs == __rhs); }
62+
_LIBCPP_HIDE_FROM_ABI constexpr strong_ordering operator<=>(const month_day& __lhs, const month_day& __rhs) noexcept {
63+
if (auto __c = __lhs.month() <=> __rhs.month(); __c != 0)
64+
return __c;
65+
return __lhs.day() <=> __rhs.day();
66+
}
6467

6568
_LIBCPP_HIDE_FROM_ABI inline constexpr
6669
month_day operator/(const month& __lhs, const day& __rhs) noexcept
@@ -82,25 +85,6 @@ _LIBCPP_HIDE_FROM_ABI constexpr
8285
month_day operator/(const day& __lhs, int __rhs) noexcept
8386
{ return month(__rhs) / __lhs; }
8487

85-
86-
_LIBCPP_HIDE_FROM_ABI inline constexpr
87-
bool operator< (const month_day& __lhs, const month_day& __rhs) noexcept
88-
{ return __lhs.month() != __rhs.month() ? __lhs.month() < __rhs.month() : __lhs.day() < __rhs.day(); }
89-
90-
_LIBCPP_HIDE_FROM_ABI inline constexpr
91-
bool operator> (const month_day& __lhs, const month_day& __rhs) noexcept
92-
{ return __rhs < __lhs; }
93-
94-
_LIBCPP_HIDE_FROM_ABI inline constexpr
95-
bool operator<=(const month_day& __lhs, const month_day& __rhs) noexcept
96-
{ return !(__rhs < __lhs);}
97-
98-
_LIBCPP_HIDE_FROM_ABI inline constexpr
99-
bool operator>=(const month_day& __lhs, const month_day& __rhs) noexcept
100-
{ return !(__lhs < __rhs); }
101-
102-
103-
10488
class month_day_last {
10589
private:
10690
chrono::month __m;
@@ -115,25 +99,10 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr
11599
bool operator==(const month_day_last& __lhs, const month_day_last& __rhs) noexcept
116100
{ return __lhs.month() == __rhs.month(); }
117101

118-
_LIBCPP_HIDE_FROM_ABI inline constexpr
119-
bool operator!=(const month_day_last& __lhs, const month_day_last& __rhs) noexcept
120-
{ return !(__lhs == __rhs); }
121-
122-
_LIBCPP_HIDE_FROM_ABI inline constexpr
123-
bool operator< (const month_day_last& __lhs, const month_day_last& __rhs) noexcept
124-
{ return __lhs.month() < __rhs.month(); }
125-
126-
_LIBCPP_HIDE_FROM_ABI inline constexpr
127-
bool operator> (const month_day_last& __lhs, const month_day_last& __rhs) noexcept
128-
{ return __rhs < __lhs; }
129-
130-
_LIBCPP_HIDE_FROM_ABI inline constexpr
131-
bool operator<=(const month_day_last& __lhs, const month_day_last& __rhs) noexcept
132-
{ return !(__rhs < __lhs);}
133-
134-
_LIBCPP_HIDE_FROM_ABI inline constexpr
135-
bool operator>=(const month_day_last& __lhs, const month_day_last& __rhs) noexcept
136-
{ return !(__lhs < __rhs); }
102+
_LIBCPP_HIDE_FROM_ABI constexpr strong_ordering
103+
operator<=>(const month_day_last& __lhs, const month_day_last& __rhs) noexcept {
104+
return __lhs.month() <=> __rhs.month();
105+
}
137106

138107
_LIBCPP_HIDE_FROM_ABI inline constexpr
139108
month_day_last operator/(const month& __lhs, last_spec) noexcept

libcxx/include/__chrono/year.h

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include <__chrono/duration.h>
1414
#include <__config>
15+
#include <compare>
1516
#include <limits>
1617

1718
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -56,25 +57,9 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr
5657
bool operator==(const year& __lhs, const year& __rhs) noexcept
5758
{ return static_cast<int>(__lhs) == static_cast<int>(__rhs); }
5859

59-
_LIBCPP_HIDE_FROM_ABI inline constexpr
60-
bool operator!=(const year& __lhs, const year& __rhs) noexcept
61-
{ return !(__lhs == __rhs); }
62-
63-
_LIBCPP_HIDE_FROM_ABI inline constexpr
64-
bool operator< (const year& __lhs, const year& __rhs) noexcept
65-
{ return static_cast<int>(__lhs) < static_cast<int>(__rhs); }
66-
67-
_LIBCPP_HIDE_FROM_ABI inline constexpr
68-
bool operator> (const year& __lhs, const year& __rhs) noexcept
69-
{ return __rhs < __lhs; }
70-
71-
_LIBCPP_HIDE_FROM_ABI inline constexpr
72-
bool operator<=(const year& __lhs, const year& __rhs) noexcept
73-
{ return !(__rhs < __lhs); }
74-
75-
_LIBCPP_HIDE_FROM_ABI inline constexpr
76-
bool operator>=(const year& __lhs, const year& __rhs) noexcept
77-
{ return !(__lhs < __rhs); }
60+
_LIBCPP_HIDE_FROM_ABI constexpr strong_ordering operator<=>(const year& __lhs, const year& __rhs) noexcept {
61+
return static_cast<int>(__lhs) <=> static_cast<int>(__rhs);
62+
}
7863

7964
_LIBCPP_HIDE_FROM_ABI inline constexpr
8065
year operator+ (const year& __lhs, const years& __rhs) noexcept

libcxx/include/__chrono/year_month.h

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <__chrono/month.h>
1515
#include <__chrono/year.h>
1616
#include <__config>
17+
#include <compare>
1718

1819
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1920
# pragma GCC system_header
@@ -52,25 +53,11 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr
5253
bool operator==(const year_month& __lhs, const year_month& __rhs) noexcept
5354
{ return __lhs.year() == __rhs.year() && __lhs.month() == __rhs.month(); }
5455

55-
_LIBCPP_HIDE_FROM_ABI inline constexpr
56-
bool operator!=(const year_month& __lhs, const year_month& __rhs) noexcept
57-
{ return !(__lhs == __rhs); }
58-
59-
_LIBCPP_HIDE_FROM_ABI inline constexpr
60-
bool operator< (const year_month& __lhs, const year_month& __rhs) noexcept
61-
{ return __lhs.year() != __rhs.year() ? __lhs.year() < __rhs.year() : __lhs.month() < __rhs.month(); }
62-
63-
_LIBCPP_HIDE_FROM_ABI inline constexpr
64-
bool operator> (const year_month& __lhs, const year_month& __rhs) noexcept
65-
{ return __rhs < __lhs; }
66-
67-
_LIBCPP_HIDE_FROM_ABI inline constexpr
68-
bool operator<=(const year_month& __lhs, const year_month& __rhs) noexcept
69-
{ return !(__rhs < __lhs);}
70-
71-
_LIBCPP_HIDE_FROM_ABI inline constexpr
72-
bool operator>=(const year_month& __lhs, const year_month& __rhs) noexcept
73-
{ return !(__lhs < __rhs); }
56+
_LIBCPP_HIDE_FROM_ABI constexpr strong_ordering operator<=>(const year_month& __lhs, const year_month& __rhs) noexcept {
57+
if (auto __c = __lhs.year() <=> __rhs.year(); __c != 0)
58+
return __c;
59+
return __lhs.month() <=> __rhs.month();
60+
}
7461

7562
_LIBCPP_HIDE_FROM_ABI constexpr
7663
year_month operator+(const year_month& __lhs, const months& __rhs) noexcept

libcxx/include/__chrono/year_month_day.h

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <__chrono/year.h>
2121
#include <__chrono/year_month.h>
2222
#include <__config>
23+
#include <compare>
2324
#include <limits>
2425

2526
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -109,32 +110,15 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr
109110
bool operator==(const year_month_day& __lhs, const year_month_day& __rhs) noexcept
110111
{ return __lhs.year() == __rhs.year() && __lhs.month() == __rhs.month() && __lhs.day() == __rhs.day(); }
111112

112-
_LIBCPP_HIDE_FROM_ABI inline constexpr
113-
bool operator!=(const year_month_day& __lhs, const year_month_day& __rhs) noexcept
114-
{ return !(__lhs == __rhs); }
115-
116-
_LIBCPP_HIDE_FROM_ABI inline constexpr
117-
bool operator< (const year_month_day& __lhs, const year_month_day& __rhs) noexcept
118-
{
119-
if (__lhs.year() < __rhs.year()) return true;
120-
if (__lhs.year() > __rhs.year()) return false;
121-
if (__lhs.month() < __rhs.month()) return true;
122-
if (__lhs.month() > __rhs.month()) return false;
123-
return __lhs.day() < __rhs.day();
113+
_LIBCPP_HIDE_FROM_ABI constexpr strong_ordering
114+
operator<=>(const year_month_day& __lhs, const year_month_day& __rhs) noexcept {
115+
if (auto __c = __lhs.year() <=> __rhs.year(); __c != 0)
116+
return __c;
117+
if (auto __c = __lhs.month() <=> __rhs.month(); __c != 0)
118+
return __c;
119+
return __lhs.day() <=> __rhs.day();
124120
}
125121

126-
_LIBCPP_HIDE_FROM_ABI inline constexpr
127-
bool operator> (const year_month_day& __lhs, const year_month_day& __rhs) noexcept
128-
{ return __rhs < __lhs; }
129-
130-
_LIBCPP_HIDE_FROM_ABI inline constexpr
131-
bool operator<=(const year_month_day& __lhs, const year_month_day& __rhs) noexcept
132-
{ return !(__rhs < __lhs);}
133-
134-
_LIBCPP_HIDE_FROM_ABI inline constexpr
135-
bool operator>=(const year_month_day& __lhs, const year_month_day& __rhs) noexcept
136-
{ return !(__lhs < __rhs); }
137-
138122
_LIBCPP_HIDE_FROM_ABI inline constexpr
139123
year_month_day operator/(const year_month& __lhs, const day& __rhs) noexcept
140124
{ return year_month_day{__lhs.year(), __lhs.month(), __rhs}; }

libcxx/include/chrono

Lines changed: 10 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -336,11 +336,8 @@ constexpr days operator-(const day& x, const day& y) noexcept;
336336
// 25.8.4, class month // C++20
337337
class month;
338338
constexpr bool operator==(const month& x, const month& y) noexcept;
339-
constexpr bool operator!=(const month& x, const month& y) noexcept;
340-
constexpr bool operator< (const month& x, const month& y) noexcept;
341-
constexpr bool operator> (const month& x, const month& y) noexcept;
342-
constexpr bool operator<=(const month& x, const month& y) noexcept;
343-
constexpr bool operator>=(const month& x, const month& y) noexcept;
339+
constexpr strong_ordering operator<=>(const month& x, const month& y) noexcept;
340+
344341
constexpr month operator+(const month& x, const months& y) noexcept;
345342
constexpr month operator+(const months& x, const month& y) noexcept;
346343
constexpr month operator-(const month& x, const months& y) noexcept;
@@ -349,11 +346,8 @@ constexpr months operator-(const month& x, const month& y) noexcept;
349346
// 25.8.5, class year // C++20
350347
class year;
351348
constexpr bool operator==(const year& x, const year& y) noexcept;
352-
constexpr bool operator!=(const year& x, const year& y) noexcept;
353-
constexpr bool operator< (const year& x, const year& y) noexcept;
354-
constexpr bool operator> (const year& x, const year& y) noexcept;
355-
constexpr bool operator<=(const year& x, const year& y) noexcept;
356-
constexpr bool operator>=(const year& x, const year& y) noexcept;
349+
constexpr strong_ordering operator<=>(const year& x, const year& y) noexcept;
350+
357351
constexpr year operator+(const year& x, const years& y) noexcept;
358352
constexpr year operator+(const years& x, const year& y) noexcept;
359353
constexpr year operator-(const year& x, const years& y) noexcept;
@@ -385,22 +379,14 @@ constexpr bool operator!=(const weekday_last& x, const weekday_last& y) noexcept
385379
class month_day;
386380
387381
constexpr bool operator==(const month_day& x, const month_day& y) noexcept;
388-
constexpr bool operator!=(const month_day& x, const month_day& y) noexcept;
389-
constexpr bool operator< (const month_day& x, const month_day& y) noexcept;
390-
constexpr bool operator> (const month_day& x, const month_day& y) noexcept;
391-
constexpr bool operator<=(const month_day& x, const month_day& y) noexcept;
392-
constexpr bool operator>=(const month_day& x, const month_day& y) noexcept;
382+
constexpr strong_ordering operator<=>(const month_day& x, const month_day& y) noexcept;
393383
394384
395385
// 25.8.10, class month_day_last // C++20
396386
class month_day_last;
397387
398388
constexpr bool operator==(const month_day_last& x, const month_day_last& y) noexcept;
399-
constexpr bool operator!=(const month_day_last& x, const month_day_last& y) noexcept;
400-
constexpr bool operator< (const month_day_last& x, const month_day_last& y) noexcept;
401-
constexpr bool operator> (const month_day_last& x, const month_day_last& y) noexcept;
402-
constexpr bool operator<=(const month_day_last& x, const month_day_last& y) noexcept;
403-
constexpr bool operator>=(const month_day_last& x, const month_day_last& y) noexcept;
389+
constexpr strong_ordering operator<=>(const month_day_last& x, const month_day_last& y) noexcept;
404390
405391
// 25.8.11, class month_weekday // C++20
406392
class month_weekday;
@@ -419,11 +405,7 @@ constexpr bool operator!=(const month_weekday_last& x, const month_weekday_last&
419405
class year_month;
420406
421407
constexpr bool operator==(const year_month& x, const year_month& y) noexcept;
422-
constexpr bool operator!=(const year_month& x, const year_month& y) noexcept;
423-
constexpr bool operator< (const year_month& x, const year_month& y) noexcept;
424-
constexpr bool operator> (const year_month& x, const year_month& y) noexcept;
425-
constexpr bool operator<=(const year_month& x, const year_month& y) noexcept;
426-
constexpr bool operator>=(const year_month& x, const year_month& y) noexcept;
408+
constexpr strong_ordering operator<=>(const year_month& x, const year_month& y) noexcept;
427409
428410
constexpr year_month operator+(const year_month& ym, const months& dm) noexcept;
429411
constexpr year_month operator+(const months& dm, const year_month& ym) noexcept;
@@ -437,11 +419,7 @@ constexpr year_month operator-(const year_month& ym, const years& dy) noexcept;
437419
year_month_day;
438420
439421
constexpr bool operator==(const year_month_day& x, const year_month_day& y) noexcept;
440-
constexpr bool operator!=(const year_month_day& x, const year_month_day& y) noexcept;
441-
constexpr bool operator< (const year_month_day& x, const year_month_day& y) noexcept;
442-
constexpr bool operator> (const year_month_day& x, const year_month_day& y) noexcept;
443-
constexpr bool operator<=(const year_month_day& x, const year_month_day& y) noexcept;
444-
constexpr bool operator>=(const year_month_day& x, const year_month_day& y) noexcept;
422+
constexpr strong_ordering operator<=>(const year_month_day& x, const year_month_day& y) noexcept;
445423
446424
constexpr year_month_day operator+(const year_month_day& ymd, const months& dm) noexcept;
447425
constexpr year_month_day operator+(const months& dm, const year_month_day& ymd) noexcept;
@@ -454,18 +432,8 @@ constexpr year_month_day operator-(const year_month_day& ymd, const years& dy) n
454432
// 25.8.15, class year_month_day_last // C++20
455433
class year_month_day_last;
456434
457-
constexpr bool operator==(const year_month_day_last& x,
458-
const year_month_day_last& y) noexcept;
459-
constexpr bool operator!=(const year_month_day_last& x,
460-
const year_month_day_last& y) noexcept;
461-
constexpr bool operator< (const year_month_day_last& x,
462-
const year_month_day_last& y) noexcept;
463-
constexpr bool operator> (const year_month_day_last& x,
464-
const year_month_day_last& y) noexcept;
465-
constexpr bool operator<=(const year_month_day_last& x,
466-
const year_month_day_last& y) noexcept;
467-
constexpr bool operator>=(const year_month_day_last& x,
468-
const year_month_day_last& y) noexcept;
435+
constexpr bool operator==(const year_month_day_last& x, const year_month_day_last& y) noexcept;
436+
constexpr strong_ordering operator<=>(const year_month_day_last_day& x, const year_month_day_last_day& y) noexcept;
469437
470438
constexpr year_month_day_last
471439
operator+(const year_month_day_last& ymdl, const months& dm) noexcept;

0 commit comments

Comments
 (0)