RxCpp
RxCpp copied to clipboard
C++20 removed std::result_of
Description: In /std:c++17 mode, this triggers a deprecation warning in recent versions of MSVC. In /std:c++latest mode, now that microsoft/STL#380 has been merged, this will trigger an error in VS 2019 16.6 Preview 2.
Reproduce steps:
- git clone --recursive https://github.com/Reactive-Extensions/RxCpp D:\RxCpp\src
- cd D:\RxCpp\src
- set CL=/D_SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING /D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING
- mkdir build_amd64
- cd D:\RxCpp\src\build_amd64
- cmake -G "Visual Studio 15 Win64" -DCMAKE_SYSTEM_VERSION=10.0.17134.0 ..\projects\CMake 2>&1
- msbuild /m /p:Platform=x64 /p:Configuration=Debug RxCpp.sln /t:Rebuild /p:BuildInParallel=true 2>&1
ErrorMessage: F:\gitP\Reactive-Extensions\RxCpp\Rx\v2\src\rxcpp\rx-util.hpp(49): error C2039: 'result_of': is not a member of 'std' [F:\gitP\Reactive-Extensions\RxCpp\build_amd64\test\rxcpp_test_defer.vcxproj]
as a starting point, since result_of is available in versions <= 17, and invoke_result is available in versions >= 17, I did this:
// rx-util.hpp
#if _HAS_CXX17
template<class F, class... TN> using invoke_result_t = typename std::invoke_result<F, TN...>::type;
#else
template<class F, class... TN> using invoke_result_t = typename std::result_of<F(TN...)>::type;
#endif
...
template<typename T>
struct is_hashable<T,
typename rxu::types_checked_from<
typename filtered_hash<T>::result_type,
typename filtered_hash<T>::argument_type,
typename std::invoke_result<filtered_hash<T>, T>::type>::type>
: std::true_type {};
then I changed all usages from rxu::result_of_t<A(B)>
to rxu::invoke_result_t<A, B>
Do you know the steps to reproduce it on Mac? I'm looking into this issue but couldn't reproduce it.
Can this issue be closed since patch is merged?