[Development] Proposing to officially allow C++20 types in Qt 6 ABIs
Thiago Macieira
thiago.macieira at intel.com
Thu Jan 27 18:14:44 CET 2022
On Thursday, 27 January 2022 08:53:31 PST Tor Arne Vestbø wrote:
> I don’t know what other things you’re referring to, but just to clarify,
> this is not the case for macOS. We build the binary Qt packages with as
> recent of an Xcode (and corresponding toolchain) as we have available in
> the CI, typically the latest version.
The Xcode case has the same constraint, just a different implementation of it.
We use the latest compiler and the latest SDK that Apple provides for us, but
we set the minimum macOS target (and the other Apple platforms) to the minimum
that we still support. That has the effect that functions that have been added
to the SDK since that minimum become weak symbols, which allow us to verify
whether they are present at runtime.
We know Apple has done such shenanigans for the libc++ headers in the past.
Maybe not for an inline-only std::span, but certainly for filesystem and other
content that has out-of-line content. That's one of the reasons why we have
some checks in at our configure/cmake time whether such functionality is
usable, above and beyond the __cpp_lib_xxx macros getting defined.
So here's my counter-proposal:
We allow C++17 and C++20 Standard Library types in our ABI provided:
* we update our builds, all of them, to build with C++20 by default
* the use of those symbols in the ABI is NOT behind an #if __cpp_lib check
The second requirement is to ensure that the oldest compilers support the
symbol in question. If you make it optional, then the build will succeed but
the symbol will be missing.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel DPG Cloud Engineering
More information about the Development
mailing list