代码之家  ›  专栏  ›  技术社区  ›  Scott Langham

如何在Visual Studio C++17中恢复auto\u ptr

  •  16
  • Scott Langham  · 技术社区  · 7 年前

    此博客页面提到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\u ptr和binary\u函数。我发现编译器错误,它们不是“std”的成员。

    上面的博客提到,可以使用细粒度控件恢复删除的功能。我想我现在可以用它来编译这个项目。从长远来看,我会考虑将websocketpp升级到C++17或用其他东西代替它。

    但是,恢复功能的魔力是什么?有什么需要我定义的吗?如果是,什么?

    1 回复  |  直到 7 年前
        1
  •  28
  •   Hans Passant    7 年前

    在VS2017 v15.5中,根据项目的/std:c++17设置,它被有条件地排除在外。您可以通过强制基础宏值来强制将其包括在内。两种基本方法:

    1. 项目(>);属性(>);C/C++>预处理器>预处理器定义和添加 _HAS_AUTO_PTR_ETC=1 . 对所有配置和平台执行此操作。
    2. 如果您使用预编译头,那么您可能喜欢在那里定义宏。在任何#包含之前,插入 #define _HAS_AUTO_PTR_ETC 1 .

    请注意“ETC”,您还将使用不推荐使用的random\u shuffle()和unary\u函数<>。预测未来是困难的,但这可能会在未来一段时间内奏效。