[Development] Switching Qt default builds to C++20 where supported
Thiago Macieira
thiago.macieira at intel.com
Tue Oct 15 00:41:05 CEST 2024
On Monday 14 October 2024 11:46:17 GMT-7 Mathias Hasselmann via Development
wrote:
> The QtCS24 misses the single one big reason you want to switch C++20 now
> and whenever possible: Concepts.
Using them unconditionally means forcing users to C++20. We agreed we can't
have that right now.
However, as I pointed out to Ivan's code reviews on std::format: we can
require them for other C++20 features. Preferably where all compilers that
implement one thing also implement concepts, but I wouldn't be opposed to
saying "you only get this if you also have that".
Using them *conditionally* is possible. I've been exploring that in ways that
improve error messages for C++20 users. My experience, for example, when you
try to connect a signal to a non-matching slot is that the concept produces a
much easier to understand and much shorter output. With C++17, you get a
static assertion failure, followed by the expansion of code that doesn't
compile producing even more errors. I do plan on submitting that and I will
not care if I make the error output for C++17 users worse in the process.
> They indeed are a total game changer and I'd boldy predict that 80% of
> all meta-programming helpers in Qt's headers could be replaced by
> concepts that are easier to understand, more expressive, more complete.
> You simply do not like C++ if you are not eager to use concepts.
Not exactly. We're missing one feature in concepts: private concepts inside a
class. Or, more to the point, "concept aliases". The example of QHash was
clear: I don't want to repeat the key type everywhere, but I have to with the
current concept design.
This means there are certain uses in our headers that would look worse with
concepts than with their current private template aliases using
std::enable_if.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Principal Engineer - Intel DCAI Platform & System Engineering
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5152 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/development/attachments/20241014/c3594494/attachment.bin>
More information about the Development
mailing list