libc++ Format Status

Overview

This document contains the status of the C++20 Format library in libc++. It is used to track both the status of the sub-projects of the Format library 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 the libc++ Format library, 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 Format library

Section

Description

Dependencies

Assignee

Patch

Status

First released version

[charconv.to.chars]

Fix integral conformance

Mark de Wever

D100722

Complete

Clang 13

[charconv.to.chars]

Add floating-point conversion

D100722

Mark de Wever (Code provided by Stephan T. Lavavej of Microsoft)

D70631

In progress

[format.error]

Class format_error

Mark de Wever

D92214

Complete

Clang 13

[format.parse.ctx]

Class template basic_format_parse_context

Mark de Wever

D93166

Complete

Clang 13

[format.context]

Class template basic_format_context

Mark de Wever

D103357

Review

[format.args]

Class template basic_format_args

Mark de Wever

D103357

Review

[format.arg]

Class template basic_format_arg

Mark de Wever

D103357

Review

[format.arg]

Class template basic_format_arg - handle

[format.arg]

Class template basic_format_arg - pointers

[format.arg.store]

Class template format-arg-store

Mark de Wever

D103357

Review

[format.formatter.spec]

Formatter specializations - character types

Mark de Wever

D96664 D103466

Review

[format.formatter.spec]

Formatter specializations - string types

Mark de Wever

D96664 D103425

Review

[format.formatter.spec]

Formatter specializations - boolean type

Mark de Wever

D96664 D103670

Review

[format.formatter.spec]

Formatter specializations - integral types

Mark de Wever

D96664 D103433

Review

[format.formatter.spec]

Formatter specializations - floating-point types

D70631

Mark de Wever

D96664

Review

[format.formatter.spec]

Formatter specializations - pointer types

[format.string.std]

Standard format specifiers - character types

Mark de Wever

D103368

Review

[format.string.std]

Standard format specifiers - string types

D103379

Mark de Wever

D103368 D103413

Review

[format.string.std]

Standard format specifiers - boolean type

D103379

Mark de Wever

D103368 D103413

Review

[format.string.std]

Standard format specifiers - integral types

Mark de Wever

D103368

Review

[format.string.std]

Standard format specifiers - floating-point types

Mark de Wever

[format.string.std]

Standard format specifiers - pointer types

Mark de Wever

[format.functions]

Format functions - format(string_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - format(wstring_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - format(const locale& loc, string_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - format(const locale& loc, wstring_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - vformat(string_view fmt, format_args args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - vformat(wstring_view fmt, wformat_args args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - vformat(const locale& loc, string_view fmt, format_args args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - vformat(const locale& loc, wstring_view fmt, wformat_args args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - format_to(Out out, wstring_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - format_to(Out out, const locale& loc, wstring_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - vformat_to(Out out, string_view fmt, format_args_t<type_identity_t<Out>, char> args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - vformat_to(Out out, wstring_view fmt, format_args_t<type_identity_t<Out>, char> args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - vformat_to(Out out, const locale& loc, string_view fmt, format_args_t<type_identity_t<Out>, char> args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - vformat_to(Out out, const locale& loc, wstring_view fmt,format_args_t<type_identity_t<Out>, wchar_t> args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - format_to_n(Out out, iter_difference_t<Out> n, string_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - format_to_n(Out out, iter_difference_t<Out> n, wstring_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n, const locale& loc, string_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - format_to_n_result<Out> format_to_n(Out out, iter_difference_t<Out> n, const locale& loc, wstring_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - formatted_size(string_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - formatted_size(wstring_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - formatted_size(const locale& loc, string_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - formatted_size(const locale& loc, wstring_view fmt, const Args&… args);

Mark de Wever

D96664

Review

[format.functions]

Format functions - Implement locale support

Mark de Wever

In progress

[format.functions]

Format functions - Improve performance format_to_n

Mark de Wever

[format.functions]

Format functions - Improve performance formatted size

Mark de Wever

Misc. Items and TODOs

(Please mark all Format-related TODO comments with the string TODO FMT, so we can find them easily.)

  • C++23 may break the ABI with P2216. This ABI break may be backported to C++20. Therefore the library will not be available on platforms where the ABI break is an issue.

Paper and Issue Status

Number

Name

Assignee

Patch

Status

First released version

P0645

Text Formatting

Mark de Wever

Partial

P1652

Printf corner cases in std::format

Mark de Wever

D103433

Review

P1892

Extended locale-specific presentation specifiers for std::format

Mark de Wever

D103368

Review

P1868

width: clarifying units of width and precision in std::format (Implements the unicode support.)

Mark de Wever

D103413 D103425 D103670

Review

P2216

std::format improvements

LWG-3242

std::format: missing rules for arg-id in width and precision

Mark de Wever

D103368

Review

LWG-3243

std::format and negative zeroes

LWG-3246

What are the constraints on the template parameter of basic_format_arg?

LWG-3248

std::format #b, #B, #o, #x, and #X presentation types misformat negative numbers

Mark de Wever

D103433

Review

LWG-3250

std::format: # (alternate form) for NaN and inf

LWG-3327

Format alignment specifiers vs. text direction

Nothing To Do

LWG-3340

Formatting functions should throw on argument/format string mismatch in [format.functions]

LWG-3371

visit_format_arg and make_format_args are not hidden friends

Mark de Wever

D103357

Review

LWG-3372

vformat_to should not try to deduce Out twice

LWG-3373

{to,from}_chars_result and format_to_n_result need the ‘we really mean what we say’

LWG-3462

§[formatter.requirements]: Formatter requirements forbid use of fc.arg()

LWG-3539

format_to must not copy models of output_iterator<const charT&>

LWG-3540

§[format.arg] There should be no const in basic_format_arg(const T* p)

LWG-3541

indirectly_readable_traits should be SFINAE-friendly for all types

LWG-3542

basic_format_arg mishandles basic_string_view with custom traits

LWG-3544

format-arg-store::args is unintentionally not exposition-only

P1361

Integration of chrono with text formatting

LWG-3218

Modifier for %d parse flag does not match POSIX and format specification

LWG-3230

Format specifier %y/%Y is missing locale alternative versions

LWG-3241

chrono-spec grammar ambiguity in [time.format]

LWG-3262

Formatting of negative durations is not specified

LWG-3270

Parsing and formatting %j with durations

LWG-3272

%I%p should parse/format duration since midnight

LWG-3332

Issue in [time.format]