C++20
Jump to navigation
Jump to search
Some things that will be interesting to use once C++20 is common:
Feature | Since | Can use? | GCC | Apple Clang | Comment |
---|---|---|---|---|---|
std::span |
C++20 | from 1.4 | 10 | 11.0.3 | Handle buffers like standard library containers without risk of overflow. |
std::format |
C++20 | from 1.5 | 13 | 15.3 | Better and more efficient formatting of strings. Text Formatting |
std::lerp |
C++20 | from 1.4 | 9 | 11.0.3 | Linear interpolation. (ui/tools/pencil-tool.cpp) |
std::bit_floor |
C++20 | from 1.4 | 9/10 | 11.0.3/13.0.0 | Compute floor(log2(x)) . (helper/mathfns.h)
|
Concepts | C++20 | from 1.5 | 6/10 | 12.0.0 Partial | Safer templating. (ui/controller.h) |
Coroutines | C++20 | from 1.5 | 10 | 10.0.1 Partial, 15.3 Full |
Simpler asynchronous code. (trace/trace.cpp) |
std::make_unique_for_overwrite
|
C++20 | from 1.5 | 11 | 15.0.0 | Don't zero arrays allocated using std::make_unique. (util/pool.cpp) |
Ranges | C++20 | from 1.5 | ? | (ui/dialog/swatches.cpp) | |
Structural templates | C++20 | from 1.4? | Partial | Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp) | |
Mathematical Constants | C++20 | 10 | 12.0.5 | Constants like std::numbers::pi .
| |
Heterogenous lookup in std::unordered_map
|
C++20 | from 1.5 | Faster lookup, use of smart pointers as keys. | ||
consteval static member functions
|
C++20 | not yet | Guaranteed compile time evaluation of member functions (stronger than constexpr )
|
References:
- General: https://en.cppreference.com/w/Template:cpp/compiler_support/20
- Apple Clang: https://developer.apple.com/documentation/xcode-release-notes
As of 21 September 2025, the CI runners for the various supported platforms are
- Linux: GCC 13.3.0 (on Ubuntu 24.04)
- Windows: GCC 15.1.0
- macOS: Apple Clang 17.0.0
- Android: Clang 19.0.0 (on Ubuntu 24.04)
We support the latest Debian stable and latest Ubuntu LTS.
Distro | gcc | clang | glib | glibmm | gtk4 | gtkmm4 |
---|---|---|---|---|---|---|
Debian 13 (Trixie) | 14.2.0 | 19.0 | 2.84.4 | 2.84.0 | 4.18.6 | 4.18.0 |
Ubuntu 24.04 (Noble) | 13.3.0 | 18.1.3 | 2.80.0 | 2.78.1 | 4.14.2 | 4.10.1 |
The build requires glibmm >= 2.78.1 and gtkmm4 >= 4.14, however Inkscape will compile its own gtkmm4 if the system version is too old, so building on Ubuntu 24.04 still works out of the box.
Deprecated items that we still use:
- warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html
- warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]