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

时间:2017-10-16 13:51:42

标签: c++ visual-studio-2017 c++17 type-deduction template-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 ++编译器以识别此功能?

1 个答案:

答案 0 :(得分:1)

升级您的编译器。

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

MSVC中的

支持仍然是实验性的和不完整的。 支持仅仅是不完整(主要围绕SFINAE),但不再是实验性的。

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

Windows的

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

修改visual studio以使用Clang 5不仅仅是一项工作。您可以做的一件事是编写一个系统来从一些依赖项和项目描述文件构建vcproj和makefile。使用makefile构建,vcproj只是为了在编辑代码时启用intellisense(我不相信你理解你的演绎指南)。 (我已经在那些粗略相当于python,批处理文件,makefile本身,有时甚至是C#的组合的地方工作过。)

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

我看到的另一种方法是生成 vcproj 文件,并手工制作 makefile 。如果您的项目目录结构足够简单,那么编写一个足以完成intellisense的vcproj并不会很难。