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

[cmp.concept]

Kent Ross

Complete


None

Unassigned

Nothing To Do

remove ops typeinfo

None

Adrian Vogelsgesang

Complete

[cmp.concept]
[cmp.result]
[cmp.object]
[cmp.alg]

Unassigned

Complete

removed by P1959R0

None

Unassigned

Nothing To Do

remove ops *_ordering

None

Christopher Di Bella

Complete

None

Ruslan Arutyunyan

Complete

None

Arthur O’Dwyer

Complete

[cmp.concept]

Arthur O’Dwyer

Complete

None

Arthur O’Dwyer

Complete [1]

[comparisons.three.way]

Chuanqi Xu

Complete


[syserr.errcat.nonvirtuals]
[syserr.compare]

Unassigned

Complete

[comparisons.three.way]

Adrian Vogelsgesang

Complete

None

Adrian Vogelsgesang

Complete

[expos.only.func]

Kent Ross

Complete

[expos.only.func]

Kent Ross

Complete

None

Hristo Hristov

Complete

None

Kent Ross

Complete

remove ops bitset

None

Hristo Hristov

Complete


None

Unassigned

Complete

remove ops allocator

None

Hristo Hristov

Complete

[comparisons.three.way]

Adrian Vogelsgesang

Complete

[comparisons.three.way]

Adrian Vogelsgesang

Complete


remove ops memory_resource

None

Hristo Hristov

Complete

None

Hristo Hristov

Complete

remove ops function

None

Hristo Hristov

Complete

replaced by issue LWG3354

None

Unassigned

Nothing To Do

removed by issue LWG3380

None

Unassigned

Nothing To Do

None

Adrian Vogelsgesang

Complete

None

Mark de Wever

Complete

None

Mark de Wever

Complete

None

Mark de Wever

Complete

None

Mark de Wever

Complete


None

Mark de Wever

Complete

[expos.only.func]

Adrian Vogelsgesang
Hristo Hristov

Complete

[expos.only.func]

Hristo Hristov

Complete

[expos.only.func]

Hristo Hristov

Complete

[expos.only.func]

Adrian Vogelsgesang

Complete

[expos.only.func]

Adrian Vogelsgesang
Hristo Hristov

Complete

removed by issue LWG3347

None

Adrian Vogelsgesang
Hristo Hristov

Complete

[expos.only.func]

Hristo Hristov

Complete

[expos.only.func]

Hristo Hristov

Complete

remove ops unordered_map

None

Hristo Hristov

Complete

remove ops unordered_set

None

Hristo Hristov

Complete

None

Hristo Hristov

Complete

None

Hristo Hristov

Complete

None

Hristo Hristov

Complete

None

Hristo Hristov

Complete


None

Unassigned

Complete

None

Mikhail Maltsev

Complete

None

Arthur O’Dwyer

Complete

None

Zoe Carver

Complete

None

Zoe Carver

Complete

None

Zoe Carver

Complete

remove ops istream_iterator

None

Konstantin Varlamov

Complete

None

Konstantin Varlamov

Complete

[concepts.cmp]

Arthur O’Dwyer

Complete

None

Zoe Carver

Complete

None

Louis Dionne

Complete

None

Louis Dionne

Complete

[concepts.cmp]

Arthur O’Dwyer

Complete

None

Zoe Carver

Complete

None

Konstantin Varlamov

Complete

None

Zoe Carver

Complete

None

Zoe Carver

Complete

None

Hui Xie

Complete

None

Hui Xie

Complete

[comparisons.three.way]

Adrian Vogelsgesang

Complete

remove ops complex

None

Hristo Hristov

Complete

None

Hristo Hristov

Complete


None

Mark de Wever

Complete

chrono::duration

None

Hristo Hristov

Complete

chrono::time_point

None

Hristo Hristov

Complete

None

Mark de Wever

Complete

None

Hristo Hristov

Complete

[time.zone.nonmembers]

chrono::time_zone

Mark de Wever

Complete

[time.zone.zonedtime.nonmembers]

chrono::zoned_time

Mark de Wever

Complete

[time.zone.leap.nonmembers]

chrono::time_leap_seconds

Mark de Wever

Complete

[time.zone.link.nonmembers]

chrono::time_zone_link

Mark de Wever

Complete

remove ops locale

None

Hristo Hristov

Complete

None

Adrian Vogelsgesang

Complete

None

Adrian Vogelsgesang

Complete

None

Hristo Hristov

Complete

None

Adrian Vogelsgesang

Complete


None

Mark de Wever

Complete

None

Mark de Wever

Complete

remove ops match_results

None

Mark de Wever

Complete

remove ops regex_iterator

None

Mark de Wever

Complete

remove ops regex_token_iterator

None

Mark de Wever

Complete

None

Adrian Vogelsgesang

Complete

Misc (Not part of R1614)

[concepts.cmp]

Hui Xie

Complete

None

Nikolas Klauser

In Progress

[alg.three.way]

Nikolas Klauser

In Progress

Note

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

Complete

19.0

P2404R3

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

P0905R1

Symmetry for spaceship

Complete

7.0

P1120R0

Consistency improvements for <=> and other comparison operators

LWG3431

<=> for containers should require three_way_comparable<T> instead of <=>