Fix compilation of Google Test in C++20 mode
authorEvgeny Mandrikov <mandrikov@gmail.com>
Mon, 6 Dec 2021 17:06:51 +0000 (18:06 +0100)
committerBenjamin Kramer <benny.kra@googlemail.com>
Mon, 6 Dec 2021 17:07:25 +0000 (18:07 +0100)
Without this patch when using CMAKE_CXX_STANDARD=20
and MSVC 19.30.30705.0 compilation of unit tests
fails with

llvm\utils\unittest\googlemock\include\gmock/gmock-actions.h(828): error C2039: 'result_of': is not a member of 'std'

Patch is taken from Google Test:
https://github.com/google/googletest/commit/61f010d703b32de9bfb20ab90ece38ab2f25977f

Do not use std::result_of as it was removed in C++20.

Differential Revision: https://reviews.llvm.org/D115163

llvm/utils/unittest/googlemock/include/gmock/gmock-actions.h

index 0a997a2..52624cd 100644 (file)
@@ -825,7 +825,8 @@ struct InvokeMethodWithoutArgsAction {
   Class* const obj_ptr;
   const MethodPtr method_ptr;
 
-  using ReturnType = typename std::result_of<MethodPtr(Class*)>::type;
+  using ReturnType =
+      decltype((std::declval<Class*>()->*std::declval<MethodPtr>())());
 
   template <typename... Args>
   ReturnType operator()(const Args&...) const {