On 28/01/2022 02:07, Thiago Macieira wrote:
On Thursday, 27 January 2022 16:49:22 PST Marc Mutz wrote:
That would break projects that build their Qt themselves (embedded), and
with C++17 (because, you know, compile times increase with every std
version 🙂).
Ok, then we make it optional to turn back the clock and compile as C++17. But
we default to C++20. This option would be as ABI-breaking as the feature
system or choosing qreal == float.

I'm not 100% sure I understood the outcome. Trying to summarize the thread here.

We want to use C++-latest stdlib types in our API _and_ ABI (i.e. out of line functions). For that, we obviously need a C++-latest build of Qt. Having C++-stdlib types in our ABI is a sailed ship, and so is getting an ABI break from changes in a given stdlib implementation (not our problem).


Debate points:

1) Does a build of Qt default to C++17 or C++-latest? Qt 5 did the latter, Qt 6 does the former. I would be fine at restoring C++-latest, with command line switches available to picking a specific C++ version if so desired.

However, this smells of maintenance burden; what "latest" means depends on the specific compiler version, that is, we need to start building compiler+CMake version lists (older CMakes does not recognize the latest C++ versions).

On top of that, C++17 is still the official minimum (= need CI coverage for C++17 builds on all platforms).


2) Should a C++-latest build of Qt work on a C++-17 only toolchain? I would say absolutely not, we don't support toolchain downgrades.


3) Should a C++-latest build of Qt work for a C++17-compiled project? I would say that this should work. If the post-C++17 features are guarded by the right #ifdefs, would that be a problem?

The added bonus of making this work would be that we could offer C++-latest binary builds of Qt and projects could still pick their preferred C++ version to use.


4) Should a C++17 build of Qt work for a C++-latest project? I'd say "yes", but what happens if the project tries to use an API that uses a C++-latest datatype? At first approximation, the user might simply get a link error (the function hasn't been built into Qt). Can we offer better QoI here, and completely hide those functions from such builds of Qt?

Not sure if it's easy -- it would mean baking the "has C++ feature" detection into the Qt build, maybe via CMake magic? But I would say that it's worth it; link errors are completely meaningless to an end user.


Thanks,
--
Giuseppe D'Angelo | giuseppe.dang...@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 - The Qt, C++ and OpenGL Experts

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

_______________________________________________
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to