Difference between revisions of "C++20"
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
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]