为什么我的 Visual Studio 2017 编译器无法识别 C++17 类型推导指南

Why does my Visual Studio 2017 compiler not recognize C++17 type deduction guides

我的 Visual Studio 2017 无法识别此代码中的类型推导指南并且无法编译:

template<typename T>
class Example{
public:
    Example(T& pVal)
        :val(pVal){}
    T& val;
};
//type deduction guide for Example constructor
template<typename T>
Example(T&)->Example<T>;

尽管如此,根据我的 sources,这应该是 C++17 类型推导指南的正确语法,并且它的定义范围与 class 它应该指导的范围相同.

如何修改我的 Visual Studio C++ 编译器以识别此功能?

升级你的编译器。

嗯,先等等。阅读发行说明,我没有在更新 3、4 或 5 的预览中看到它。

support in MSVC remains experimental and incomplete. and 支持仍然不完整(主要围绕 SFINAE),但不再是实验性的。

Visual studio 附带了一个混合的 clang 和微软编译器。 当 MSVC 将它更新到 clang 5.0 编译器时应该支持这个(我最后检查它是 3.8)。

可以下载 windows 的

Clang 5 LLVM,但它与 visual studio 的集成具有挑战性,您想要做的一些事情可能根本行不通。但它确实支持推导指南。

修改 visual studio 以使用 Clang 5 是一项艰巨的工作。您可以做的一件事是编写一个系统来从一些依赖项和项目描述文件构建 vcproj 和 makefile。在编辑代码时,使用 makefile 来构建,而 vcproj 只是为了启用智能感知(我相信它不会理解你的推导指南)。 (我工作过的地方大致相当于 python、批处理文件、makefile 本身,有时甚至是 C#)。

这(创建您自己的构建链)本身就是一个项目。

我见过的另一种方法是生成 vcproj 文件,然后手工制作 makefiles。如果你的项目目录结构足够简单,写一个足够好的 vcproj 来做智能感知并不难。