August 29, 2025Aug 29 C++26 brings a series of improvements to std::format, continuing the work started in C++20 and refined in C++23. These changes improve formatting consistency, runtime safety, and user ergonomics. There are so many of these updates, that I decided to divide them into two articles. C++26: std::format improvement (Part 1) by Sandor Dargo From the article: Arithmetic overloads of std::to_string and std::to_wstring use std::format P2587R3 by Victor Zverovich proposes replacing sprintf with std::format in the arithmetic overloads of std::to_string and std::to_wstring. The motivation? std::to_string has long been known to produce not-so-great and misleading results (differing from iostreams), especially with floating-point values. std::to_string uses the global C locale. In practice, itâs unlocalized. Also, it often places the decimal points to suboptimal places: std::cout << std::to_string(-1e-7); // prints: -0.000000 std::cout << std::to_string(0.42); // prints: 0.420000 These outputs are imprecise and often unnecessary. By leveraging std::format (and ultimately std::to_chars), we now get clearer, shorter representations. The representations of floating-point overloads become also unlocalized and use the shortest decimal representations. As a result, the above outputs would change as follow: std::cout << std::to_string(-1e-7); // prints: -1e-7 std::cout << std::to_string(0.42); // prints: 0.42View the full article
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.