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

标签 c++ visual-studio-2017 c++17 type-deduction template-argument-deduction

我的 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 类型推导指南的正确语法,并且它的定义范围与其应指导的类相同。

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

最佳答案

升级你的编译器。

好吧,先等等。阅读发行说明,我没有在 Update 3、4 或 5 的预览版中看到它。

MSVC 中的支持仍处于试验阶段且不完整。 支持仍然不完整(主要围绕 SFINAE),但不再是实验性的。

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

Clang 5 LLVM for windows 可以下载,但它与 visual studio 的集成具有挑战性,有些你想做的事情可能根本行不通。但它确实支持演绎指南。

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

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

我见过的另一种方法是生成 vcproj 文件,然后手工制作 makefile。如果您的项目目录结构足够简单,那么编写一个足以执行智能感知的 vcproj 并不难。

关于c++ - 为什么我的 Visual Studio 2017 编译器无法识别 C++17 类型推导指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46771997/

相关文章:

c# - Nunit 测试项目中缺少 System.Web.Http 方法

c++ - VS 2017错误C2664 map 插入尝试

c++ - 通用模板模板参数

c++ - 将 cmake 与 Code::Blocks 一起使用

c++ - 即使在修复泄漏后,Valgrind 仍显示相同的内存泄漏

c++ - 如何创建将 Class<T> 转换为 Class<U> 的函数,其中 T 和 U 是任意数字类型?

Matlab 墨西哥 "Missing dependent shared libraries"

C++ auto on int16_t 强制转换为整数

c++ - 从C++ 17开始的prvalue差异中的直接列表初始化与复制列表初始化与复制初始化的示例

C++字符数组分配错误