[Development] Raising the minimum to C++20

Philippe philwave at gmail.com
Wed May 3 18:23:53 CEST 2023

>>  <bit> header

Not yet available with Apple CLang (I did not test today, but a fews ago).


On Tue, 02 May 2023 17:39:01 -0700
Thiago Macieira <thiago.macieira at intel.com> wrote:

> C++23 is on the way, so maybe it's time for us to raise our minimum to the one 
> version before that. Let's aim for Qt 6.7, because feature-freeze for 6.6 is 
> within one month, and lets us warn our users this is coming.
> By this, I mean to:
> * modify our build system so Qt compiles with -std=c++20 or equivalent
> * require that user code compiling Qt headers be similarly done
> * remove the requirement for #if checks for C++17 Standard Library features
> * make a couple of C++20 features mandatory (see below)
> Of the C++20 features I currently see a good reason to make mandatory:
> * feature-test macros (no change: we're already using them)
> * spaceship operator and <compare> header
> * char8_t
> * std::is_constant_evaluated()
> * constinit
> * <bit> header
> * (maybe) designated initialisers
> * (maybe) constexpr from <algorithm> and <utility>
> I'm not proposing modules, concepts or coroutines be allowed in our code just 
> yet. I think concepts will be the first of those, but we need to understand how 
> to use them first and how our code will change. I'd love to require std::format 
> and std::source_location, but those don't seem to be ready in the proposed 
> versions above.
> For this, I'd also like to request we raise our minimum compiler versions to:
> * GCC 10 (released May 2020)
> * Clang 10 (released March 2020)
> * MSVC 2022 that is current today
> * XCode that is current today
> Clang and GCC will be, at the time of Qt 6.7's release, just under 4 years 
> old. That should be enough to have been included in any long-term support 
> Linux distribution. Currently, both SLE 15.4 and RHEL/RockyLinux 9 have GCC 
> 13, while Ubuntu 22.04 and Debian 11 (current stable) have GCC 11. Debian will 
> probably release its next stable before Qt 6.7, though whether it'll still 
> upgrade from GCC 12 to 13 I don't know. When we released Qt 6.0, our minimum 
> of GCC 8 was of a lower age, at 2.5 years, so we could reasonably bump our 
> minimum GCC to 11 and still be 6 months more lenient. There are no new 
> features in GCC 11 that we could use without also requiring a more recent 
> Clang.
> Speaking of Clang, I simply chose a contemporaneous version and one that had a 
> similar feature list. FreeBSD 13-STABLE (13.2) comes with Clang 14, which is 
> much newer. We could raise the minimum if we wanted, but the intersection of 
> features with GCC 10 or 11 doesn't change much; we get std::bit_cast with 
> Clang/libc++ 14, but that's about it.
> This proposal also drops MSVC 2019 and assumes that users of 2022, like XCode, 
> keep their compilers reasonably up-to-date. That is, that they'll update to 
> the latest at least once in the next 10 months.
> I don't have access to QNX and INTEGRITY toolchain information, so I'd like to 
> request that they simply match the feature list above, with minimal 
> workarounds.
> Opinions?
> -- 
> Thiago Macieira - thiago.macieira (AT) intel.com
>   Cloud Software Architect - Intel DCAI Cloud Engineering

More information about the Development mailing list