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
None Adrian Vogelsgesang Complete
[comparisons.three.way] Chuanqi Xu Complete
[expos.only.func] Kent Ross Complete
[comparisons.three.way] Adrian Vogelsgesang In Progress
None Adrian Vogelsgesang In Progress
[expos.only.func] Kent Ross Complete
optional
nullopt
None Kent Ross In Progress
None Kent Ross Complete
[comparisons.three.way] Adrian Vogelsgesang Complete
[comparisons.three.way] Adrian Vogelsgesang Complete
None Adrian Vogelsgesang Complete
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
basic_string <https://reviews.llvm.org/D131421>
None Mark de Wever Complete
None Mark de Wever Complete
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
[concepts.cmp] Arthur O’Dwyer Complete
[concepts.cmp] Arthur O’Dwyer Complete
ranges::elements_view::iterator
[concepts.cmp] Unassigned Not Started
chrono::duration None Mark de Wever Not Started
chrono::point None Mark de Wever Not Started
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
None Mark de Wever Complete
chrono::time_zone
chrono::leap_second
chrono::time_zone_link
A <chrono> implementation Unassigned Not Started
None Adrian Vogelsgesang Complete
None Adrian Vogelsgesang In Progress
None Adrian Vogelsgesang In Progress
sub_match
None Mark de Wever In Progress
None Adrian Vogelsgesang Complete

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
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    
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