From b4c5b8e3bd26015b2d01d9c20538c2db477f4c41 Mon Sep 17 00:00:00 2001 From: pajlada Date: Tue, 30 Dec 2025 13:12:33 +0100 Subject: [PATCH] chore: enable C++23 and prefer `std::expected` (#6693) --- CHANGELOG.md | 2 ++ CMakeLists.txt | 2 +- src/util/Expected.hpp | 26 ++++++++++++++++++++++---- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba45c2dc..9a6b8057 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,8 @@ - Dev: Added Clazy linting in CI. (#6623) - Dev: Added custom clang-tidy module linting in CI. (#6626) - Dev: CMake option `USE_ALTERNATE_LINKER` now errors if the given linker can't be found. (#6692) +- Dev: Enable C++ 23. (#6693) +- Dev: Prefer `std::expected` over `nonstd::expected_lite`. (#6693) - Dev: Moved Twitch PubSub to liveupdates. (#6638) ## 2.5.4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d4d3d64..817f9367 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -270,7 +270,7 @@ else () string(TIMESTAMP cmake_gen_date "%Y-%m-%d") endif () -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Generate resource files diff --git a/src/util/Expected.hpp b/src/util/Expected.hpp index d4784235..71dd11d8 100644 --- a/src/util/Expected.hpp +++ b/src/util/Expected.hpp @@ -1,6 +1,12 @@ #pragma once -#include +#include + +#if __cpp_lib_expected >= 202202L +# include +#else +# include +#endif #include @@ -8,17 +14,29 @@ class QString; namespace chatterino { +#if __cpp_lib_expected >= 202202L +template +using Expected = std::expected; + +// convenience function from nonstd/expected.hpp +template +constexpr std::unexpected> makeUnexpected(E &&value) +{ + return std::unexpected>(std::forward(value)); +} +#else template using Expected = nonstd::expected_lite::expected; -template -using ExpectedStr = Expected; - // convenience function from nonstd/expected.hpp template constexpr nonstd::unexpected> makeUnexpected(E &&value) { return nonstd::unexpected>(std::forward(value)); } +#endif + +template +using ExpectedStr = Expected; } // namespace chatterino