IFNDR is definitely too far. I think even weak library UB is too far. The function behaves perfectly deterministically even though it's not the desired result. Mojibake is not UB. That we've improved the descriptive language so we can discuss "literal encoding" hasn't changed the behavior of anything.
`sprintf` has had this behavior forever.
Since the format is user extensible, I don't think any assumptions can be made about the result of print, or format, being well formed for any encoding that has well formed conditions. For the UTF-8 to UTF-16 case, print has to do _something_, so it might as well try to do something sensible. In most cases, though, it should be doing nothing.
I prepared these 2 polls for tonight's meeting, but we did not have the opportunity to vote on them. I hope we will be able to vote on them next time. Please suggest alternative or additional polls that you think would be informative!
If, and only if, the literal encoding is UTF-8, <print> facilities should assume
that their formatted results are UTF-8 text.
SF F N A SA
If a <print> facility assumes that the result of formatting is UTF-8 text, but
it is not, then the program is ill-formed, no diagnostic required.
Please make it UB
IFNDR is really nasty and should be reserved for things that the compiler has no real control over like ODR issues.
IFNDR can only be applied based on the source code. IFNDR cannot be applied depending on user input at run-time.
I think having wording along the line of "Precondition: The format string is UTF-8 encoded" in the wording of vprint_unicode is the best way to achieve this intent.
The above won't cover strings provided by the user for replacements (and that's probably just the easiest case to identify).
SG16 mailing list
SG16 mailing list