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 In Progress
[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

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
P1614R2 The Mothership has Landed In Progress  
P2404R0 Relaxing equality_comparable_with’s, totally_ordered_with’s, and three_way_comparable_with’s common reference requirements to support move-only types    
P2405R0 nullopt_t and nullptr_t should both have operator<=> and operator==    
LWG3330 Include <compare> from most library headers Complete 13.0
LWG3347 std::pair<T, U> now requires T and U to be less-than-comparable Nothing To Do  
LWG3350 Simplify return type of lexicographical_compare_three_way Nothing To Do  
LWG3360 three_way_comparable_with is inconsistent with similar concepts Nothing To Do  
LWG3380 common_type and comparison categories Nothing To Do  
LWG3395 Definition for three-way comparison needs to be updated Nothing To Do