Difference between revisions of "C++20"

From Inkscape Wiki
Jump to navigation Jump to search
Line 8: Line 8:
! Feature                          !! Since !! Can use?                                    !! GCC    !! Apple Clang !! Comment
! Feature                          !! Since !! Can use?                                    !! GCC    !! Apple Clang !! Comment
|-
|-
| <code>std::span</code>            || C++20 || style="background: lightgreen;" | from 1.3? || 10    || 11.0.3 || Handle buffers like standard library containers without risk of overflow.
| <code>std::span</code>            || C++20 || style="background: lightgreen;" | from 1.|| 10    || 11.0.3 || Handle buffers like standard library containers without risk of overflow.
|-
|-
| <code>std::format</code>          || C++20 || style="background: pink;"      |          || 13    || N/A    || Better and more efficient formatting of strings. [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html Text Formatting]
| <code>std::format</code>          || C++20 || style="background: pink;"      |          || 13    || N/A    || Better and more efficient formatting of strings. [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html Text Formatting]
|-
|-
| <code>std::lerp</code>            || C++20 || style="background: lightgreen;" | from 1.4? ||  9    || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)
| <code>std::lerp</code>            || C++20 || style="background: lightgreen;" | from 1.4 ||  9    || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)
|-
|-
| <code>std::bit_floor</code>      || C++20 || style="background: lightgreen;" | from 1.4? || 9/10  || 11.0.3/13.0.0 || Compute floor(log2(x)). (helper/mathfns.h)
| <code>std::bit_floor</code>      || C++20 || style="background: lightgreen;" | from 1.4 || 9/10  || 11.0.3/13.0.0 || Compute floor(log2(x)). (helper/mathfns.h)
|-
|-
| <code>Concepts</code>            || C++20 ||                                  from 1.4? || 6/10  || 12.0.0 Partial || Safer templating. (ui/controller.h)
| <code>Concepts</code>            || C++20 ||                                  from 1.4? || 6/10  || 12.0.0 Partial || Safer templating. (ui/controller.h)

Revision as of 12:00, 27 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.4 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 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]