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

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

本文关键字:类型 C++17 识别 Visual 我的 Studio 2017 编译器 为什么      更新时间:2023-10-16

My 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>;

尽管如此,根据我的消息来源,这应该是C++17类型推导指南的正确语法,并且它与它应该指导的类在相同的范围内定义。

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

升级编译器。

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

c++17在MSVC中的支持仍然是实验性的和不完整的。c++14和c++11的支持仅仅保持不完整(主要围绕SFINAE),但不再是实验性的。

Visual studio附带了clang和microsoft的混合编译器。当MSVC将clang-c2更新到clang5.0编译器时,它应该支持这一点(上次我检查它是3.8)

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

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

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

我看到的另一种方法是生成vcproj文件,并手工制作makefiles。如果你的项目目录结构足够简单,那么写一个足够好的vcproj来做intellisense就不难了。