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

Can I resurect removed std::result_of in MSVC 16.6 with some macro?

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++17 功能在 C++20 中退役。

鉴于过去的历史,这些 "deprecation overrides" 现在和未来一段时间内使用应该相对安全。下面是来自 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.