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

问题描述:

我的Visual Studio 2017年不会致使识别此代码,不需额外编译类型演绎指南:为什么我的Visual Studio 2017年编译器无法识别C++ 17型扣指导

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++编译器来识别这个功能吗?

+4

您是否检查过您的Visual Studio版本的C++ 1z支持?编译器必须添加功能。他们不会神奇地意识到新的标准修订。 – StoryTeller

+6

[案例和要点](https://blogs.msdn.microsoft.com/vcblog/2017/05/10/c17-features-in-vs-2017-3/):**模板参数扣除类模板* *状态 - 否。 – StoryTeller

+2

这里是[官方文档](https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance)和(通常是最新的)[来自cppreference的页面](http ://en.cppreference.com/w/cpp/compiler_support) – UnholySheep

升级你的编译器。

那么先等一下。阅读发行说明,我没有看到它在更新3,4或在MSVC 5.

支持预览仍然实验和不完整的。 支持仅仅是不完整的(主要在SFINAE附近),但不再是实验性的。

Visual Studio中附带的混合铛和微软的编译器。 应该支持这个,当MSVC更新到铿锵5.0编译器(最后我检查它是3.8)。

Clang 5 LLVM窗户可以下载,但它与Visual Studio集成是具有挑战性的,你想做的事可能根本不起作用一些事情。但它确实支持演绎指南。

修改Visual Studio来使用锵5比一些工作了。你可以做的一件事是编写一个系统,从一些依赖和项目描述文件中构建vcproj和makefile。编辑代码时,使用makefiles进行编译,而vcproj只是为了启用intellisense(我不相信您的演绎指南)。 (我曾经在python,批处理文件,makefiles本身以及有时甚至是C#的大致相同的地方工作过)。

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

另一种方法我见过的工作是产生vcproj文件,以及手工工艺的makefile文件秒。如果你的项目目录结构足够简单,编写一个足够好的智能感知的vcproj不会很难。

+2

英特尔C++编译器具有VS集成功能,并且在C++ 14/17领域也做得更好。它缺少一些功能(或者在某些结构上有缺陷)。 –

+0

不幸的是,Clang/C2不会收到任何更新https://developercommunity.visualstudio.com/content/problem/34693/clangc2-version-getting-old.html#reply-167512 –