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 | not yet | 13 | N/A | 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.4? | 6/10 | 12.0.0 Partial | Safer templating. (ui/controller.h) |
Coroutines |
C++20 | not yet | 10 | 10.0.1 Partial | Simpler asynchronous code. (trace/trace.cpp) |
std::make_unique_for_overwrite
|
C++20 | not yet | 11 | N/A | Don't zero arrays allocated using std::make_unique. (util/pool.cpp) |
Ranges |
C++20 | not yet | ? | for (init; decl : expr). (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. |
As of 6 September 2023, the CI runners for:
- Linux:
- appimage:linux GNU 10.5 (Building on "oldest supported Ubuntu LTS release", we must wait until April 2025 to use a newer GNU version!) Note: Gtkmm4 is not available in Ubuntu 20.04 or 22.04!
- inkscape:linux GNU 11.4.0
- Windows
- inkscape:windows:build Gnu 13.1.0
- inkscape:windows:dist Same as above.
- macOS:
- inkscape::macos:arm Apple Clang 13.1.6
- inkscape:macos:x64: Apple Clang 14.0.0.
We strive to support lastest Debian stable and latest Ubuntu LTS. But this may not be possible for a gtk4 based release. Ideally, we would target gtkmm4 4.10 as it has a critical scrolling bug fix.
Distro | gcc | clang | gtkmm4 |
---|---|---|---|
Debian 12 (Bookworm, stable) | 12.2.0 | 15.0.6 | 4.8.3 |
Ubuntu 22.04 (Jammy Jellyfish) | 12.3.0 | 15.0.7 | Not packaged! |
Ubuntu 23.04 (Lunar) | 13.1.0 | 16.0.0 | 4.10.1 |
Errors and Deprecated items that we use:
- error: call of overloaded ‘lerp(double, double&, double&)’ is ambiguous (ui/knot/knot-holder-entity.cpp)
- 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]