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

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