我可以在MSVC 16.6中用一些宏来恢复被删除的std::result_of吗?

问题描述 投票:0回答:1

在C++20模式下,MSVC 16.6删除了在C++20标准中删除的result_of。我是支持做道德上正确的事情,但是很多第三方库(例子)我使用失败。

有时MSVC让用户定义一个定义,使删除的功能仍然被启用,是否有一个选项可以为result_of这样做?我已经尝试过_HAS_FEATURES_REMOVED_IN_CXX20,它似乎工作,但事实上,宏以_开头的事实吓到了我,它表明它可能是MSVC内部机制,而不是用户应该设置的东西。

c++ visual-c++ visual-studio-2019 deprecated c++20
1个回答
5
投票

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

_HAS_FEATURES_REMOVED_IN_CXX20_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS 也应如此 C++17的特性在C++20中退役了。

考虑到过去的历史,这些 "废弃覆盖 "在现在和未来一段时间内应该是比较安全的。下面是一段较早的引用(关于VS2017),来自于一位 MS认可的博客.

5. (重要!)你很可能会遇到第三方库中的破坏源码的改动,而这些改动是你无法修改的(很容易或者根本无法修改)。我们尝试提供逃生通道,这样你就可以恢复被删除的功能或抑制废弃警告,并继续你的工作,但首先,请向相关的库维护者报告这些问题。通过帮助他们更新代码,你将会帮助更多像你一样的C++程序员。

© www.soinside.com 2019 - 2024. All rights reserved.