From 01e1520414302e4db016d21008fb9f68b5961e56 Mon Sep 17 00:00:00 2001 From: Vitaly Fanaskov Date: Sun, 7 Jan 2024 00:00:16 +0100 Subject: [PATCH] Add a cmake check whether std::expected is supported or not Note. Perhaps a wrong way. Please let me know if there is something better. --- CMakePresets.json | 2 +- cmake/helpers.cmake | 10 ++++++++++ cmake/try-compile-apps/expected.cpp | 12 ++++++++++++ test/CMakeLists.txt | 5 +++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 cmake/helpers.cmake create mode 100644 cmake/try-compile-apps/expected.cpp diff --git a/CMakePresets.json b/CMakePresets.json index 1c21bb7..390ec07 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -1,5 +1,5 @@ { - "version": 3, + "version": 6, "cmakeMinimumRequired": { "major": 3, "minor": 17, diff --git a/cmake/helpers.cmake b/cmake/helpers.cmake new file mode 100644 index 0000000..dea7c65 --- /dev/null +++ b/cmake/helpers.cmake @@ -0,0 +1,10 @@ +function(has_expected OUT_RESULT) + try_compile(COMPILE_RESULT + ${CMAKE_BINARY_DIR}/test_apps + ${CMAKE_SOURCE_DIR}/cmake/try-compile-apps/expected.cpp + CXX_STANDARD 23 + CXX_STANDARD_REQUIRED TRUE + CXX_EXTENSIONS FALSE + ) + set(${OUT_RESULT} ${COMPILE_RESULT} PARENT_SCOPE) +endfunction() \ No newline at end of file diff --git a/cmake/try-compile-apps/expected.cpp b/cmake/try-compile-apps/expected.cpp new file mode 100644 index 0000000..6fd2579 --- /dev/null +++ b/cmake/try-compile-apps/expected.cpp @@ -0,0 +1,12 @@ +#include +#include + +int main(int /*argc*/, char* /*argv*/[]) +{ + using Expected = std::expected; + + Expected result{0}; + Expected unxepectedResult = std::unexpected(std::string{"foo"}); + + return result != unxepectedResult ? *result : -1; +} \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c3cdc1f..3d3fcc8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,3 +1,8 @@ +include(${CMAKE_SOURCE_DIR}/cmake/helpers.cmake) + +has_expected(HAS_EXPECTED_RESULT) +message(STATUS "Has std::expected support: ${HAS_EXPECTED_RESULT}") + find_package(Catch2 CONFIG REQUIRED) find_package(fmt CONFIG REQUIRED) find_package(spdlog CONFIG REQUIRED)