> Did I understand you correctly that we
> - would still guard any such method with an #if __cplusplus >= ...,

More likely __cpp_lib_span, etc, but yes in principle.

> - would compile our shipped artifacts in C++20 mode on all platforms where 
> this is possible

I presume that would be necessary, yes.

But I confess to not having thought about pre-compiled binaries before hitting 
"send" 🙂 so good point.

> - and users still could compile their own code in C++17 mode on those 
> platforms without issues?

That's the goal, yes. Within reason, of course.

There are two aspects here:

First, and easy, C++17 code will not see C++20 functions, so any C++20 code 
needs to be written such that the relation between a C++17 and C++20 build of 
Qt is the same as between a x.y and x.(y+1) build of Qt, respectively. Ie. 
backwards, but not forwards compatible. This means we can't have, say, virtual 
functions that use these types.

Second, and more subtly, this may unearth issues when a Qt compiled against 
C++20 is used to build an app in C++17 mode. I don't think we systematically 
test that. I'm thinking e.g. about issues of BC in the stdlib. Again, these 
issues would exist today, and not just on MSVC. E.g. we use std::function 
across the ABI boundary. If that were to change incompatibly, we'd need to ship 
separate C++17 and C++20 builds.

> - Lastly, in your proposal, platforms without C++20 support would still be 
> able to build Qt, but lack the newer API? And if at some point they would 
> gain a newer compiler, they would have to recompile Qt to get access to those 
> methods, and linker errors otherwise?

Correct.

> If the above is correct (and it actually works), then I think we can do that. 
> The only tricky part is the last point (you upgrade your compiler to support 
> C++20, but your Qt still doesn't provide the C++20 methods you see in the 
> headers), but I think this would be fine if it gets documented.

Thanks,
Marc


Marc Mutz

Principal Software Engineer

The Qt Company
Erich-Thilo-Str. 10 12489
Berlin, Germany

[email protected]<mailto:[email protected]>

www.qt.io<https://www.qt.io>

Geschäftsführer: Mika Pälsi, Juha Varelius, Jouni Lintunen

Sitz der Gesellschaft: Berlin,

Registergericht: Amtsgericht Charlottenburg,

HRB 144331 B

[https://s3.eu-north-1.amazonaws.com/email-signature-tool-leroy/qt-company.png]<https://www.qt.io/>
[https://s3.eu-north-1.amazonaws.com/email-signature-tool-leroy/facebook.png]<https://www.facebook.com/qt/>
     
[https://s3.eu-north-1.amazonaws.com/email-signature-tool-leroy/twitter.png] 
<https://twitter.com/qtproject>    
[https://s3.eu-north-1.amazonaws.com/email-signature-tool-leroy/linkedin.png] 
<https://www.linkedin.com/company/the-qt-company/>        
[https://s3.eu-north-1.amazonaws.com/email-signature-tool-leroy/youtube.png] 
<https://www.youtube.com/QtStudios>

_______________________________________________
Development mailing list
[email protected]
https://lists.qt-project.org/listinfo/development

Reply via email to