此博客页面提到Visual Studio删除了一些std功能: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。对所有配置和平台都这样做。如果使用预编译头,那么您可能更喜欢在此处定义宏。在任何#includes之前,插入#define _HAS_AUTO_PTR_ETC 1。提防“ ETC”,您还将使用已弃用的random_shuffle()和unary_function 。预测未来很困难,但这可能会在未来一段时间内起作用。 08-17 05:07