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 Complete Clang 14
[format.args] Class template basic_format_args   Mark de Wever D103357 Complete Clang 14
[format.arg] Class template basic_format_arg   Mark de Wever D103357 Complete Clang 14
[format.arg] Class template basic_format_arg - handle   Unassigned   Not Started  
[format.arg] Class template basic_format_arg - pointers   Unassigned   Not Started  
[format.arg.store] Class template format-arg-store   Mark de Wever D103357 Complete Clang 14
[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   In Progress  
[format.formatter.spec] Formatter specializations - pointer types   Unassigned   Not Started  
[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   Not Started  
[format.string.std] Standard format specifiers - pointer types   Mark de Wever   Not Started  
[format.functions] Format functions - format(string_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - format(wstring_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - format(const locale& loc, string_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - format(const locale& loc, wstring_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - vformat(string_view fmt, format_args args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - vformat(wstring_view fmt, wformat_args args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - vformat(const locale& loc, string_view fmt, format_args args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - vformat(const locale& loc, wstring_view fmt, wformat_args args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - format_to(Out out, wstring_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - format_to(Out out, const locale& loc, wstring_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - vformat_to(Out out, string_view fmt, format_args_t<type_identity_t<Out>, char> args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - vformat_to(Out out, wstring_view fmt, format_args_t<type_identity_t<Out>, char> args);   Mark de Wever D96664 Complete Clang 14
[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 Complete Clang 14
[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 Complete Clang 14
[format.functions] Format functions - format_to_n(Out out, iter_difference_t<Out> n, string_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - format_to_n(Out out, iter_difference_t<Out> n, wstring_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[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 Complete Clang 14
[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 Complete Clang 14
[format.functions] Format functions - formatted_size(string_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - formatted_size(wstring_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - formatted_size(const locale& loc, string_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - formatted_size(const locale& loc, wstring_view fmt, const Args&… args);   Mark de Wever D96664 Complete Clang 14
[format.functions] Format functions - Implement locale support   Mark de Wever   In Progress  
[format.functions] Format functions - Improve performance format_to_n   Mark de Wever   Not Started  
[format.functions] Format functions - Improve performance formatted size   Mark de Wever   Not Started  

Misc. Items and TODOs

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

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 Mark de Wever   In Progress  
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     Not Started  
LWG-3246 What are the constraints on the template parameter of basic_format_arg?     Not Started  
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     Not Started  
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]     Not Started  
LWG-3371 visit_format_arg and make_format_args are not hidden friends Mark de Wever D103357 Complete Clang 14
LWG-3372 vformat_to should not try to deduce Out twice     Not Started  
LWG-3373 {to,from}_chars_result and format_to_n_result need the ‘we really mean what we say’     Not Started  
LWG-3462 §[formatter.requirements]: Formatter requirements forbid use of fc.arg()     Not Started  
LWG-3539 format_to must not copy models of output_iterator<const charT&>     Not Started  
LWG-3540 §[format.arg] There should be no const in basic_format_arg(const T* p)     Not Started  
LWG-3541 indirectly_readable_traits should be SFINAE-friendly for all types     Not Started  
LWG-3542 basic_format_arg mishandles basic_string_view with custom traits     Not Started  
LWG-3544 format-arg-store::args is unintentionally not exposition-only     Not Started  
           
P1361 Integration of chrono with text formatting     Not Started  
LWG-3218 Modifier for %d parse flag does not match POSIX and format specification     Not Started  
LWG-3230 Format specifier %y/%Y is missing locale alternative versions     Not Started  
LWG-3241 chrono-spec grammar ambiguity in [time.format]     Not Started  
LWG-3262 Formatting of negative durations is not specified     Not Started  
LWG-3270 Parsing and formatting %j with durations     Not Started  
LWG-3272 %I%p should parse/format duration since midnight     Not Started  
LWG-3332 Issue in [time.format]     Not Started