如何在 Visual Studio C++17 中恢复 auto_ptr

How to restore auto_ptr in Visual Studio C++17

此博客页面提到 Visual Studio 删除了一些标准功能:

https://blogs.msdn.microsoft.com/vcblog/2017/12/08/c17-feature-removals-and-deprecations/

我有一个项目使用一些现在使用 C++17 功能的 C++ 库。该项目还使用第三方库 websocketpp (https://github.com/zaphoyd/websocketpp),它仍然使用一些现已删除的功能。例如 auto_ptr 和 binary_function。我收到编译器错误,它们不是 'std'.

的成员

上面的博客提到可以使用细粒度控件恢复已删除的功能。我想我可以用它来让这个项目暂时编译。从长远来看,我会看到有关将 websocketpp 升级到 C++17 或用其他东西替换它的信息。

但是,恢复功能的魔法是什么?我需要#define 吗?如果是,是什么?

在 VS2017 v15.5 中它被有条件地排除,基于项目的 /std:c++17 设置。您可以通过强制使用基础宏值来强制包含它。执行此操作的两种基本方法:

  1. 项目 > 属性 > C/C++ > 预处理器 > 预处理器定义并添加 _HAS_AUTO_PTR_ETC=1。对所有配置和平台都这样做。
  2. 如果您使用预编译的 header 那么您可能更喜欢在那里定义宏。在任何 #includes 之前,插入 #define _HAS_AUTO_PTR_ETC 1.

当心 "ETC",您还会吞下已弃用的 random_shuffle() 和 unary_function<>。预测未来很困难,但这可能会在未来一段时间内奏效。