【问题标题】:Why does my Visual Studio 2017 compiler not recognize C++17 type deduction guides为什么我的 Visual Studio 2017 编译器无法识别 C++17 类型推导指南
【发布时间】:2017-10-16 13:51:41
【问题描述】:

我的 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++ 编译器以识别此功能?

【问题讨论】:

  • 您是否检查了 C++1z 对您的 Visual Studio 版本的支持?编译器必须添加功能。他们不会神奇地意识到新的标准修订。
  • Case and point: 类模板的模板参数推导 状态 - 否。
  • 这是official documentation 和(通常是最新的)page from cppreference
  • 但显然有些编译器已经支持这些特性。我可以修改 Visual Studio 以使用这些编译器吗?
  • 为什么投反对票?我不来 stackoverflow 是因为我知道它是如何工作的,而是因为我需要一些帮助。这不是您可以轻松查找的主题。我对编译器不太了解,对Visual Studio的开发也不太了解。这就是为什么我在这里问。这就是它的用途。

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


【解决方案1】:

升级你的编译器。

先等一下。阅读发行说明,我在 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 来做智能感知并不难。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 2018-02-10
  • 2020-12-14
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
相关资源
最近更新 更多