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  
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’        
           
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]