libc++ Spaceship Operator Status (operator<=>)¶
Overview¶
This document contains the status of the C++20 spaceship operator support in libc++. It is used to track both the status of the sub-projects of the effort and who is assigned to these sub-projects. This is imperative to effective implementation so that work is not duplicated and implementors are not blocked by each other.
If you are interested in contributing to this effort, please send a message to the #libcxx channel in the LLVM discord. Please do not start working on any of the assigned items below.
Sub-Projects in the Implementation Effort¶
Section  | 
Description  | 
Dependencies  | 
Assignee  | 
Complete  | 
|---|---|---|---|---|
None  | 
Ruslan Arutyunyan  | 
Complete  | 
||
None  | 
Arthur O’Dwyer  | 
Complete  | 
||
[cmp.concept]  | 
Kent Ross  | 
Complete  | 
||
[cmp.concept]  | 
Arthur O’Dwyer  | 
Complete  | 
||
None  | 
Arthur O’Dwyer  | 
Complete 1  | 
||
[comparisons.three.way]  | 
Christopher Di Bella  | 
In Progress  | 
||
[comparisons.three.way]  | 
Chuanqi Xu  | 
Complete  | 
||
[expos.only.func]  | 
Kent Ross  | 
Complete  | 
||
error_category 
 | 
[comparisons.three.way]  | 
Unassigned  | 
Not Started  | 
|
error_code 
error_condition 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
[expos.only.func]  | 
Kent Ross  | 
Complete  | 
||
optional 
nullopt 
 | 
None  | 
Kent Ross  | 
In Progress  | 
|
monostate 
variant 
 | 
None  | 
Kent Ross  | 
In Progress  | 
|
unique_ptr 
 | 
[comparisons.three.way]  | 
Unassigned  | 
Not Started  | 
|
shared_ptr 
 | 
[comparisons.three.way]  | 
Unassigned  | 
Not Started  | 
|
type_index 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
to_chars_result 
 | 
None  | 
Mark de Wever  | 
Complete  | 
|
from_chars_result 
 | 
None  | 
Mark de Wever  | 
Complete  | 
|
stacktrace_entry 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
basic_stacktrace 
 | 
[alg.three.way]  | 
Unassigned  | 
Not Started  | 
|
None  | 
Christopher Di Bella  | 
In Progress  | 
||
None  | 
Christopher Di Bella  | 
In Progress  | 
||
array 
 | 
[expos.only.func]  | 
Unassigned  | 
Not Started  | 
|
deque 
 | 
[expos.only.func]  | 
Unassigned  | 
Not Started  | 
|
forward_list 
 | 
[expos.only.func]  | 
Unassigned  | 
Not Started  | 
|
list 
 | 
[expos.only.func]  | 
Unassigned  | 
Not Started  | 
|
vector 
 | 
[expos.only.func]  | 
Unassigned  | 
Not Started  | 
|
map 
multimap 
 | 
[expos.only.func]  | 
Unassigned  | 
Not Started  | 
|
multiset 
set 
 | 
[expos.only.func]  | 
Unassigned  | 
Not Started  | 
|
queue 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
stack 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
reverse_iterator 
 | 
None  | 
Mikhail Maltsev  | 
Complete  | 
|
move_iterator 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
counted_iterator 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
ranges::iota_view::iterator 
 | 
[concepts.cmp]  | 
Unassigned  | 
Not Started  | 
|
ranges::transform_view::iterator 
 | 
[concepts.cmp]  | 
Unassigned  | 
Not Started  | 
|
ranges::elements_view::iterator 
 | 
[concepts.cmp]  | 
Unassigned  | 
Not Started  | 
|
chrono::duration 
chrono::time_point 
chrono::day 
chrono::month 
chrono::year 
chrono::month_day 
chrono::month_day_last 
chrono::year_month 
chrono::year_month_day 
chrono::year_month_day_last 
chrono::time_zone 
chrono::leap_second 
chrono::time_zone_link 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
filesystem::path 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
filesystem::directory_entry 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
sub_match 
 | 
None  | 
Unassigned  | 
Not Started  | 
|
thread::id 
 | 
None  | 
Unassigned  | 
Not Started  | 
Note
- 1
 std::strong_order(long double, long double)is not yet implemented.
Misc. Items and TODOs¶
(Note: files with required updates will contain the TODO at the beginning of the list item so they can be easily found via global search.)
Paper and Issue Status¶
Number  | 
Name  | 
Status  | 
First released version  | 
|---|---|---|---|
The Mothership has Landed  | 
In Progress  | 
||
Relaxing equality_comparable_with’s, totally_ordered_with’s, and three_way_comparable_with’s common reference requirements to support move-only types  | 
|||
nullopt_t and nullptr_t should both have operator<=> and operator==  | 
|||
Include <compare> from most library headers  | 
Complete  | 
13.0  | 
|
std::pair<T, U> now requires T and U to be less-than-comparable  | 
Nothing To Do  | 
||
Simplify return type of lexicographical_compare_three_way  | 
Nothing To Do  | 
||
three_way_comparable_with is inconsistent with similar concepts  | 
Nothing To Do  | 
||
common_type and comparison categories  | 
Nothing To Do  | 
||
Definition for three-way comparison needs to be updated  | 
Nothing To Do  |