如何在 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 设置。您可以通过强制使用基础宏值来强制包含它。执行此操作的两种基本方法:
- 项目 > 属性 > C/C++ > 预处理器 > 预处理器定义并添加
_HAS_AUTO_PTR_ETC=1
。对所有配置和平台都这样做。
- 如果您使用预编译的 header 那么您可能更喜欢在那里定义宏。在任何 #includes 之前,插入
#define _HAS_AUTO_PTR_ETC 1
.
当心 "ETC",您还会吞下已弃用的 random_shuffle() 和 unary_function<>。预测未来很困难,但这可能会在未来一段时间内奏效。
此博客页面提到 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 设置。您可以通过强制使用基础宏值来强制包含它。执行此操作的两种基本方法:
- 项目 > 属性 > C/C++ > 预处理器 > 预处理器定义并添加
_HAS_AUTO_PTR_ETC=1
。对所有配置和平台都这样做。 - 如果您使用预编译的 header 那么您可能更喜欢在那里定义宏。在任何 #includes 之前,插入
#define _HAS_AUTO_PTR_ETC 1
.
当心 "ETC",您还会吞下已弃用的 random_shuffle() 和 unary_function<>。预测未来很困难,但这可能会在未来一段时间内奏效。