This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
Section: 28.5.6.4 [format.formatter.spec] Status: New Submitter: Jiang An Opened: 2025-06-27 Last modified: 2025-06-28
Priority: Not Prioritized
View other active issues in [format.formatter.spec].
View all other issues in [format.formatter.spec].
View all issues with New status.
Discussion:
The following program doesn't compile with MSVC STL (Godbolt link).
#include <format>
#include <ranges>
int main() {
auto iv1 = std::views::iota(42ull, 1729ull);
auto iv2 = std::views::iota(iv1.begin(), iv1.end());
std::format("{}", iv2.size()); // Error
}
In MSVC STL, the type of iv2.size()
is an integer-class type, and the standard hasn't guaranteed there're
enabled formatter specializations for integer-class types. As a result, this program is not guaranteed to
be well-formed.
std::formatter
specializations for integer-class types to get rid of
such uncertainty and inconsistency.
Proposed resolution:
This wording is relative to N5008.
Modify 28.5.6.4 [format.formatter.spec] as indicated:
-2- […] Each header that declares the template
formatter
provides the following enabled specializations:
(2.1) — […]
(2.2) — […]
(2.3) — […]
(2.?) — For each
charT
, for each cv-unqualified integer-class type (24.3.4.4 [iterator.concept.winc])IntegerClass
, a specializationtemplate<> struct formatter<IntegerClass, charT>;(2.4) — […]