Difference between revisions of "C++20"
Jump to navigation
Jump to search
(Add heterogenous lookup; can't use yet (macOS)) |
m (Add consteval static as an entry) |
||
Line 31: | Line 31: | ||
|- | |- | ||
| Heterogenous lookup in <code>std::unordered_map</code> | | Heterogenous lookup in <code>std::unordered_map</code> | ||
|| C++20 || style="background: pink;" | not yet || || || Faster lookup, use of smart pointers as keys. | || C++20 || style="background: pink;" | not yet || || || Faster lookup, use of smart pointers as keys.|}References: | ||
* General: https://en.cppreference.com/w/Template:cpp/compi|- | |||
|<code>consteval static</code> member functions | |||
|C++20 | |||
| style="background: pink;" |not yet | |||
| | |||
| | |||
|Guaranteed compile time evaluation of member functions (stronger than <code>constexpr</code>) | |||
|} | |} | ||
References: | References: | ||
* General: https://en.cppreference.com/w/Template:cpp/compiler_support/20 | *General: https://en.cppreference.com/w/Template:cpp/compiler_support/20 | ||
* Apple Clang: https://developer.apple.com/documentation/xcode-release-notes | * Apple Clang: https://developer.apple.com/documentation/xcode-release-notes | ||
As of 27 March 2024, the CI runners for the various supported platforms are | As of 27 March 2024, the CI runners for the various supported platforms are | ||
* Linux: | *Linux: | ||
** appimage:linux: GNU 13.2.0 (building on Ubuntu 23.10) | **appimage:linux: GNU 13.2.0 (building on Ubuntu 23.10) | ||
** inkscape:linux: Same as above | **inkscape:linux: Same as above | ||
* Windows | *Windows | ||
** inkscape:windows:build: GNU 13.2.0 | **inkscape:windows:build: GNU 13.2.0 | ||
** inkscape:windows:dist: Same as above | ** inkscape:windows:dist: Same as above | ||
* macOS: | *macOS: | ||
** inkscape::macos:arm: Apple Clang 15.0.0 | **inkscape::macos:arm: Apple Clang 15.0.0 | ||
** inkscape:macos:x64: Apple Clang 13.0.0 (temporarily disabled since GTK4 port) | **inkscape:macos:x64: Apple Clang 13.0.0 (temporarily disabled since GTK4 port) | ||
We strive to support latest Debian stable and latest Ubuntu LTS. However, we had to break that promise since the GTK4 port, which requires gtkmm4 >= 4.14: | We strive to support latest Debian stable and latest Ubuntu LTS. However, we had to break that promise since the GTK4 port, which requires gtkmm4 >= 4.14: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Distro | ! Distro|| gcc|| clang||gtkmm4 | ||
|- | |- | ||
| Debian 12 (Bookworm, stable) | |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 22.04 (Jammy Jellyfish) ||12.3.0 ||15.0.7 ||Not packaged! | ||
|- | |- | ||
| Ubuntu 23.04 (Lunar) | |Ubuntu 23.04 (Lunar)|| 13.1.0 || 16.0.0 ||4.10.1 | ||
|- | |- | ||
| Ubuntu 24.04 (Noble) | |Ubuntu 24.04 (Noble)||13.2.0||18.1.0|| 4.10.1 (???) | ||
|} | |} | ||
Ubuntu users therefore have the following options: | Ubuntu users therefore have the following options: | ||
* Wait for Ubuntu 24.04, expected around 25 April 2024. | *Wait for Ubuntu 24.04, expected around 25 April 2024. | ||
* Upgrade to Ubuntu 24.04 now. | *Upgrade to Ubuntu 24.04 now. | ||
* Upgrade to Ubuntu 23.10 and build gtkmm4 from source, as is currently done by CI. | *Upgrade to Ubuntu 23.10 and build gtkmm4 from source, as is currently done by CI. | ||
* ??? | * ??? | ||
Deprecated items that we still use: | Deprecated items that we still use: | ||
* 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: 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] | *warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion] |
Revision as of 18:11, 23 April 2024
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 | 15.3 | 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, 15.3 Full |
Simpler asynchronous code. (trace/trace.cpp) | ||||||
std::make_unique_for_overwrite
|
C++20 | not yet | 11 | 15.0.0 | Don't zero arrays allocated using std::make_unique. (util/pool.cpp) | ||||||
Ranges | C++20 | not yet | ? | (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 .
| |||||||
Heterogenous lookup in std::unordered_map
|
C++20 | not yet | }References: | consteval static member functions
|
C++20 | not yet | Guaranteed compile time evaluation of member functions (stronger than constexpr )
|
References:
- General: https://en.cppreference.com/w/Template:cpp/compiler_support/20
- Apple Clang: https://developer.apple.com/documentation/xcode-release-notes
As of 27 March 2024, the CI runners for the various supported platforms are
- Linux:
- appimage:linux: GNU 13.2.0 (building on Ubuntu 23.10)
- inkscape:linux: Same as above
- Windows
- inkscape:windows:build: GNU 13.2.0
- inkscape:windows:dist: Same as above
- macOS:
- inkscape::macos:arm: Apple Clang 15.0.0
- inkscape:macos:x64: Apple Clang 13.0.0 (temporarily disabled since GTK4 port)
We strive to support latest Debian stable and latest Ubuntu LTS. However, we had to break that promise since the GTK4 port, which requires gtkmm4 >= 4.14:
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 |
Ubuntu 24.04 (Noble) | 13.2.0 | 18.1.0 | 4.10.1 (???) |
Ubuntu users therefore have the following options:
- Wait for Ubuntu 24.04, expected around 25 April 2024.
- Upgrade to Ubuntu 24.04 now.
- Upgrade to Ubuntu 23.10 and build gtkmm4 from source, as is currently done by CI.
- ???
Deprecated items that we still use:
- 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]