Difference between revisions of "C++20"

From Inkscape Wiki
Jump to navigation Jump to search
m (Mark std::views as unavailable on Apple clang)
(Mark coroutines as unsupported)
Line 10: Line 10:
| <code>std::span</code>            || C++20 || style="background: lightgreen;" | from 1.4  || 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.4  || 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;"      |   not yet || 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)
Line 18: Line 18:
| <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)
|-
|-
| <code>Coroutines</code>          || C++20 ||                                             || 10    || 10.0.1 Partial || Simpler asynchronous code. (trace/trace.cpp)
| <code>Coroutines</code>          || C++20 || style="background: pink;" |        not yet || 10    || 10.0.1 Partial || Simpler asynchronous code. (trace/trace.cpp)
|-
|-
| <code>std::make_unique_for_overwrite</code> || C++20 || style="background: pink;" |       || 11    || N/A   || Don't zero arrays allocated using std::make_unique. (util/pool.cpp)
| <code>std::make_unique_for_overwrite</code>
                                    || C++20 || style="background: pink;" |         not yet || 11    || N/A || Don't zero arrays allocated using std::make_unique. (util/pool.cpp)
|-
|-
| <code>Ranges</code>              || C++20 || style="background: pink;" |       from 1.4? ||        || ?     || for (init; decl : expr). (ui/dialog/swatches.cpp)
| <code>Ranges</code>              || C++20 || style="background: pink;" |         not yet ||        || ? || for (init; decl : expr). (ui/dialog/swatches.cpp)
|-
|-
| <code>[https://stackoverflow.com/a/60244416/5075760 Structural templates]</code> || C++20 || from 1.4? ||   || Partial     || Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)
| <code>[https://stackoverflow.com/a/60244416/5075760 Structural templates]</code>
                                    || C++20 ||                                   from 1.4? ||       || Partial || Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)
|-
|-
| <code>Mathematical Constants</code>|| C++20 ||                                           || 10     || 12.0.5 || Constants like std::numbers::pi.     
| <code>Mathematical Constants</code>
                                    || C++20 ||                                             || 10     || 12.0.5 || Constants like std::numbers::pi.     
|}
|}



Revision as of 12:25, 8 December 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 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]