NoS*_*tAl 3 c++ deprecated visual-c++ c++20 visual-studio-2019
C++20 模式下的 MSVC 16.6 删除了 C++20 标准中删除的 result_of。我完全赞成做道德上正确的事情,但是我使用的许多 3rd 方库(示例)都失败了。
有时 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 功能执行相同的操作。
鉴于过去的历史,这些“弃用覆盖”现在和未来一段时间使用起来应该相对安全。以下是来自MS 认可的博客的旧引用(关于 VS 2017)。
5.(重要!)您很可能会在第三方库中遇到无法修改(轻松或根本无法修改)的源代码中断更改。我们尝试提供逃生舱口,以便您可以恢复已删除的功能或使弃用警告静音并继续您的工作,但首先,请向相关库维护人员报告此类问题。通过帮助他们更新代码,您将帮助更多像您一样的 C++ 程序员。