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.
3651. Unspecified lifetime guarantees for the format stringSection: 28.5 [format] Status: New Submitter: Barry Revzin Opened: 2021-12-08 Last modified: 2022-01-30
Priority: 3
View other active issues in [format].
View all other issues in [format].
View all issues with New status.
Discussion:
Is this program guaranteed to be valid:
#include <format> #include <algorithm> struct Thing { }; template <> struct std::formatter<Thing> { std::string_view spec; constexpr auto parse(std::format_parse_context& ctx) { auto end = std::find(ctx.begin(), ctx.end(), '}'); spec = std::string_view(ctx.begin(), end); return end; } auto format(Thing, std::format_context& ctx) { return std::ranges::copy(spec, ctx.out()).out; } }; int main() { std::print("{:lwg issue}\n", Thing{}); }
In parse()
, the formatter for Thing
holds onto a string view of its specifiers. And then in format()
, it just prints them. I don't think we say anywhere that this works. Does this code print "lwg issue"
because there's no issue or does it print some garbage memory somewhere because there is one?
string_view
's into the format string (for named argument support), which implies that it should work. But it'd be nice to come out and say that.
[2022-01-30; Reflector poll]
Set priority to 3 after reflector poll.
"Presumably we need to say in [formatter.requirements] that [pc.begin()
, pc.end()
) is guaranteed to be a valid range until the next call to parse()
or f
is destroyed, whichever comes first."
Proposed resolution:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4