Difference between revisions of "C++20"

From Inkscape Wiki
Jump to navigation Jump to search
Line 31: Line 31:
As of 1 September 2023, the CI runners for:
As of 1 September 2023, the CI runners for:
* Linux:
* Linux:
** appimage:linux GNU 9.4.0 (Using Ubuntu 20.04)
** appimage:linux GNU 9.4.0 (Using Ubuntu 20.04) We can use 10.5 with Ubuntu 20.04. If we stick to building on the "oldest supported Ubuntu LTS release", we must wait until April 2025 to use a newer GNU version!
** inkscape:linux GNU 11.4.0
** inkscape:linux GNU 11.4.0
* Windows
* Windows

Revision as of 11:45, 6 September 2023

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.3? 10 11.0.3 Handle buffers like standard library containers without risk of overflow.
std::format C++20 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 10 10.0.1 Partial Simpler asynchronous code. (trace/trace.cpp)
std::make_unique_for_overwrite C++20 11 N/A Don't zero arrays allocated using std::make_unique. (util/pool.cpp)
Ranges C++20 from 1.4? ? 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 1 September 2023, the CI runners for:

  • Linux:
    • appimage:linux GNU 9.4.0 (Using Ubuntu 20.04) We can use 10.5 with Ubuntu 20.04. If we stick to building on the "oldest supported Ubuntu LTS release", we must wait until April 2025 to use a newer GNU version!
    • 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.

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]