C++20

From Inkscape Wiki
Revision as of 12:25, 8 December 2023 by PBS (talk | contribs) (Mark coroutines as unsupported)
Jump to navigation Jump to search

See also C++11, C++17.

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]