From 7e1bea9527616ab6ab38425e7290579f05dd9bb1 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Tue, 30 Apr 2024 16:05:35 +0200 Subject: [PATCH] replace removed `std::result_of` with `std::invoke_result` `std::result_of` was deprecated in C++17 & removed in C++20. A lot of compilers still make it available even when running in C++20 mode, while others don't. Therefore replace it with equivalent use of `std::invoke_result`. Fixes #3695. --- NEWS.md | 8 ++++++++ src/common/sorting.h | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 11813328d..446b6777a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,11 @@ +# Version ? + +## Bug fixes + +* fixed compilation of `src/common/sorting.h` with certain compilers due to + the deprecation & removal of `std::result_of<>` in C++20. Fixes #3695. + + # Version 84.0 "Sleeper" 2024-04-28 ## New features and enhancements diff --git a/src/common/sorting.h b/src/common/sorting.h index 4958d7557..c371d145f 100644 --- a/src/common/sorting.h +++ b/src/common/sorting.h @@ -27,7 +27,7 @@ namespace mtx::sort { template< typename Titer , typename Tcriterion_maker - , typename Tcriterion = typename std::result_of< Tcriterion_maker(typename std::iterator_traits::value_type) >::type + , typename Tcriterion = typename std::invoke_result< Tcriterion_maker, typename std::iterator_traits::value_type >::type , typename Tcomparator = std::less > void