[Development] std::format support for Qt string types

Giuseppe D'Angelo giuseppe.dangelo at kdab.com
Fri Jun 7 14:35:25 CEST 2024


On 07/06/2024 10:53, Ivan Solovev via Development wrote:
> Hi
> 
>  > I think we should conceptually separate formatting from printing on a
>  > terminal. std::format isn't /_just_/ for printing on terminals
> 
> I agree. But the same question about encoding to be used is still valid 
> here.
> 
>  > What do you mean by "readable" here?
> 
> I was mostly thinking about "readable in the terminal", because that's how
> I did most of my tests. And from that point of view "readable" is very
> close to what QString::toLocal8Bit() tries to do. So that's what I called
> option 2 in my initial email.
> 

I'd just set this problem aside. Correct printing in a terminal may 
require re-encoding of the output of a formatter, in a way which is 
complicated, and that's why we have `std::print`.

> https://eel.is/c++draft/print.fun#10

> https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2093r14.html#unicode



>  > I'm not following this. If I do
>  >
>  >  std::format("{} {}", utf8string, latin1string)
>  >
>  > what am I supposed to get out? A string which is a mix of two different
>  > encodings? I don't think that's ever possibly wanted.
> 
> Yes, that's exactly what I mean. And, by the way, that's exactly how
> std::format is working now.

What Eddy said already. (A corollary: I'm 100% OK at adding a formatter 
for QByteArray(View), basically reusing the one for std::string_view).


>  > The concern I was quoting before is this: suppose that tomorrow we have
>  > a formatter for `const char16_t *` into char. This formatter does some
>  > kind of transcoding. Then QString(View) ought to do precisely the same!
>  > If we take a different decision now, we risk having compatibility
>  > problems down the line.
> 
> Standard in its current state does not care about transcoding (see the
> utf8 + latin1 example above). So, if we do not go for option 3 at least
> for QLatin1StringView and QUtf8StringView, we would already have
> compatibility problems.

I disagree: the standard cares about transcoding, in the sense that it 
deliberately doesn't allow it to happen: you can't format a charN_t 
sequence out. Today, you have to convert them (and you're on your own). 
Tomorrow, who knows -- thus my concern that we need to be aligned with 
upstream, or we risk divergence. Cf. for example this approach:

> https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2728r6.html#add-utf_view-specialization-of-formatter




>  >> Now, I don't really know if formatting char16_t is anywhere on SG16's
>  >> radar in the short term, but that sounds definitely something to
>  >> investigate and report about, in order to make a more informed decision.
>  >
>  > Yup, I think we need to engage SG16 before continuing with this. We need
>  > char16_t to be enabled on the generic formatters, for one thing.
> 
> I must admit that I have no idea how this process works. How to reach out
> to them and ask if they have any plans about char16_t support?
> Maybe even asking if they have any plans for wchar_t -> char formatters
> would be helpful.
> Is there anyone familiar with the process?

SG16 is one of the most open and welcoming C++ study groups. You can 
find plenty of resources here https://github.com/sg16-unicode/sg16 . 
Their mailing list (reflector) is here 
https://lists.isocpp.org/mailman/listinfo.cgi/sg16 .


Thank you,

-- 
Giuseppe D'Angelo | giuseppe.dangelo at kdab.com | Senior Software Engineer
KDAB (France) S.A.S., a KDAB Group company
Tel. France +33 (0)4 90 84 08 53, http://www.kdab.com
KDAB - Trusted Software Excellence

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4244 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.qt-project.org/pipermail/development/attachments/20240607/84f51187/attachment.bin>


More information about the Development mailing list