Closed cyanray closed 3 years ago
可以在 include 对应的头文件之前
#define _HAS_FEATURES_REMOVED_IN_CXX20 // 或者 _HAS_DEPRECATED_RESULT_OF 如果不想把别的 C++20 删除的东西也还原
#define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS
或者自己造个线程池轮子(((
可以在 include 对应的头文件之前
#define _HAS_FEATURES_REMOVED_IN_CXX20 // 或者 _HAS_DEPRECATED_RESULT_OF 如果不想把别的 C++20 删除的东西也还原 #define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS
或者自己造个线程池轮子(((
原来还有这种黑科技……
好像也可以直接用
decltype(f(args...))
来代替
typename std::result_of<F(Args...)>::type
可以在 include 对应的头文件之前
#define _HAS_FEATURES_REMOVED_IN_CXX20 // 或者 _HAS_DEPRECATED_RESULT_OF 如果不想把别的 C++20 删除的东西也还原 #define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS
或者自己造个线程池轮子(((
原来还有这种黑科技……
好像也可以直接用
decltype(f(args...))
来代替
typename std::result_of<F(Args...)>::type
MSVC 在删除旧功能上很积极,gcc 和 clang 倒是更看重后向兼容而不是符合标准……
如果是自己的代码肯定会改成新的,但是问题来自第三方库的话还是尽量不要动不属于自己的代码吧,用比如上面那种方法绕过去我觉得比较 OK(
可以在 include 对应的头文件之前
#define _HAS_FEATURES_REMOVED_IN_CXX20 // 或者 _HAS_DEPRECATED_RESULT_OF 如果不想把别的 C++20 删除的东西也还原 #define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS
或者自己造个线程池轮子(((
原来还有这种黑科技…… 好像也可以直接用
decltype(f(args...))
来代替
typename std::result_of<F(Args...)>::type
MSVC 在删除旧功能上很积极,gcc 和 clang 倒是更看重后向兼容而不是符合标准……
如果是自己的代码肯定会改成新的,但是问题来自第三方库的话还是尽量不要动不属于自己的代码吧,用比如上面那种方法绕过去我觉得比较 OK(
那个库没人维护了,所以我fork一份自己维护,这样就可以修改了 hhhhh
mirai-cpp在c++20下编译会报找不到 std::result_of 的错误。(来自于第三方库 ThreadPool) 根据cppreference,std::result_of在C++17被标记为deprecated,C++20中被移除。
如果是C++20环境,把 std::result_of 修改成 std::invoke_result 就可以了。