c++ - 我可以用一些宏恢复 MSVC 16.6 中删除的 std::result_of 吗?

标签 c++ visual-c++ visual-studio-2019 deprecated c++20

C++20 模式下的 MSVC 16.6 移除了在 C++20 标准中移除的 result_of。 我完全赞成做道德上正确的事情,但我使用的许多第 3 方库(example)都失败了。

有时 MSVC 允许用户定义一个定义,以便仍然启用已删除的功能。 是否可以为 result_of 执行此操作? 我已经尝试过 _HAS_FEATURES_REMOVED_IN_CXX20,它似乎可以工作,但宏以 _ 开头的事实让我感到害怕,这表明它可能是内部 MSVC 机制,而不是用户应该设置的东西。

最佳答案

定义 _HAS_DEPRECATED_RESULT_OF_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING 应该更精细地恢复 result_of 并关闭其弃用警告。

_HAS_FEATURES_REMOVED_IN_CXX20_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS 应该对在 C++20 中退役的所有 C++17 功能做同样的事情。

鉴于过去的历史,这些“弃用覆盖”现在和 future 一段时间内使用应该相对安全。以下是来自 MS sanctioned blog 的较旧报价(关于 VS 2017) .

5. (Important!) It’s very likely that you’ll encounter source breaking changes in third-party libraries that you can’t modify (easily or at all). We try to provide escape hatches so you can restore removed features or silence deprecation warnings and get on with your work, but first, please report such issues to the relevant library maintainers. By helping them update their code, you’ll help many more C++ programmers just like you.

关于c++ - 我可以用一些宏恢复 MSVC 16.6 中删除的 std::result_of 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61979425/

相关文章:

c++ - 如何使用命名变量为 const 右值引用参数定义默认值?

c++ - 如何使用 C 预处理器生成可变大小(取决于操作系统)的十六进制文字?

c++ - 如何动态使用 GetProcAddress

c++ - 为什么此代码只能在一个平台上运行而不能在另一个平台上运行?

c# - 将特定文件夹中的所有类标记为已过时

c++ - 对结构成员使用泛型类型

c++什么时候终止程序的内存泄漏很重要?

windows - 使用 Microsoft VC (cl.exe) 2010 (10.0) Express 和 ActivePerl 5.12.4/32 构建 Perl/C 模块

visual-c++ - Gstreamer 与 Visual C++ express 2010 - 教程 1

c++ - 为什么通过GLFW进行的这个简单的OpenGL程序在Intel HD P4600上不起作用?