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 |
Complete |
Clang 13 |
|||
[charconv.to.chars] |
Add floating-point conversion |
Mark de Wever (Code provided by Stephan T. Lavavej of Microsoft) |
In progress |
||||
[format.error] |
Class format_error |
Mark de Wever |
Complete |
Clang 13 |
|||
[format.parse.ctx] |
Class template basic_format_parse_context |
Mark de Wever |
Complete |
Clang 13 |
|||
[format.context] |
Class template basic_format_context |
Mark de Wever |
Review |
||||
[format.args] |
Class template basic_format_args |
Mark de Wever |
Review |
||||
[format.arg] |
Class template basic_format_arg |
Mark de Wever |
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 |
Review |
||||
[format.formatter.spec] |
Formatter specializations - character types |
Mark de Wever |
Review |
||||
[format.formatter.spec] |
Formatter specializations - string types |
Mark de Wever |
Review |
||||
[format.formatter.spec] |
Formatter specializations - boolean type |
Mark de Wever |
Review |
||||
[format.formatter.spec] |
Formatter specializations - integral types |
Mark de Wever |
Review |
||||
[format.formatter.spec] |
Formatter specializations - floating-point types |
Mark de Wever |
Review |
||||
[format.formatter.spec] |
Formatter specializations - pointer types |
||||||
[format.string.std] |
Standard format specifiers - character types |
Mark de Wever |
Review |
||||
[format.string.std] |
Standard format specifiers - string types |
Mark de Wever |
Review |
||||
[format.string.std] |
Standard format specifiers - boolean type |
Mark de Wever |
Review |
||||
[format.string.std] |
Standard format specifiers - integral types |
Mark de Wever |
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 |
Review |
||||
[format.functions] |
Format functions - format(wstring_view fmt, const Args&… args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - format(const locale& loc, string_view fmt, const Args&… args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - format(const locale& loc, wstring_view fmt, const Args&… args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - vformat(string_view fmt, format_args args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - vformat(wstring_view fmt, wformat_args args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - vformat(const locale& loc, string_view fmt, format_args args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - vformat(const locale& loc, wstring_view fmt, wformat_args args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - format_to(Out out, wstring_view fmt, const Args&… args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - format_to(Out out, const locale& loc, wstring_view fmt, const Args&… args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - vformat_to(Out out, string_view fmt, format_args_t<type_identity_t<Out>, char> args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - vformat_to(Out out, wstring_view fmt, format_args_t<type_identity_t<Out>, char> args); |
Mark de Wever |
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 |
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 |
Review |
||||
[format.functions] |
Format functions - format_to_n(Out out, iter_difference_t<Out> n, string_view fmt, const Args&… args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - format_to_n(Out out, iter_difference_t<Out> n, wstring_view fmt, const Args&… args); |
Mark de Wever |
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 |
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 |
Review |
||||
[format.functions] |
Format functions - formatted_size(string_view fmt, const Args&… args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - formatted_size(wstring_view fmt, const Args&… args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - formatted_size(const locale& loc, string_view fmt, const Args&… args); |
Mark de Wever |
Review |
||||
[format.functions] |
Format functions - formatted_size(const locale& loc, wstring_view fmt, const Args&… args); |
Mark de Wever |
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 |
---|---|---|---|---|---|
Text Formatting |
Mark de Wever |
Partial |
|||
Printf corner cases in std::format |
Mark de Wever |
Review |
|||
Extended locale-specific presentation specifiers for std::format |
Mark de Wever |
Review |
|||
width: clarifying units of width and precision in std::format (Implements the unicode support.) |
Mark de Wever |
Review |
|||
std::format improvements |
|||||
std::format: missing rules for arg-id in width and precision |
Mark de Wever |
Review |
|||
std::format and negative zeroes |
|||||
What are the constraints on the template parameter of basic_format_arg? |
|||||
std::format #b, #B, #o, #x, and #X presentation types misformat negative numbers |
Mark de Wever |
Review |
|||
std::format: # (alternate form) for NaN and inf |
|||||
Format alignment specifiers vs. text direction |
Nothing To Do |
||||
Formatting functions should throw on argument/format string mismatch in [format.functions] |
|||||
visit_format_arg and make_format_args are not hidden friends |
Mark de Wever |
Review |
|||
vformat_to should not try to deduce Out twice |
|||||
{to,from}_chars_result and format_to_n_result need the ‘we really mean what we say’ |
|||||
§[formatter.requirements]: Formatter requirements forbid use of fc.arg() |
|||||
format_to must not copy models of output_iterator<const charT&> |
|||||
§[format.arg] There should be no const in basic_format_arg(const T* p) |
|||||
indirectly_readable_traits should be SFINAE-friendly for all types |
|||||
basic_format_arg mishandles basic_string_view with custom traits |
|||||
format-arg-store::args is unintentionally not exposition-only |
|||||
Integration of chrono with text formatting |
|||||
Modifier for %d parse flag does not match POSIX and format specification |
|||||
Format specifier %y/%Y is missing locale alternative versions |
|||||
chrono-spec grammar ambiguity in [time.format] |
|||||
Formatting of negative durations is not specified |
|||||
Parsing and formatting %j with durations |
|||||
%I%p should parse/format duration since midnight |
|||||
Issue in [time.format] |