Visual Studio 2017 15.9.13 不能使用自动 C++ 模板

visual studio 2017 15.9.13 can't use auto c++ templates

本文关键字:C++ 模板 不能 2017 Studio Visual      更新时间:2023-10-16

我在大约一个小时前安装了C 桌面和Linux开发的Visual Studio 2017我尝试了使用C 17自动模板的代码,并惊讶地说出了一个错误:

Error C3533 a parameter cannot have a type that contains 'auto'

这是引起问题的代码

template <class T, T null_value, bool no_negative, auto Deleter>
struct HandleHelper
{
    using pointer = HandleWrapper<T, null_value, no_negative>;
    void operator(pointer p)
    {
        Deleter(p);
    }
};

在Visual Studio 2015之前,由于缺乏C 的支持,我使用了类似的东西:

template <class T, T null_value, bool no_negative, class DelType, DelType Deleter>
struct HandleHelper
{
    using pointer = HandleWrapper<T, null_value, no_negative>;
    void operator(pointer p)
    {
        Deleter(p);
    }
};

但是自动模板看起来更优雅

确保您的项目属性页面中设置了正确的" C 语言标准"。VS 2017的默认值为C++14

右键单击您的项目,然后选择"属性"。然后在左侧的树视图上展开C/C++节点。从扩展的菜单选项中选择"语言"。检查" C 语言标准"是否设置为ISO C++17 Standard (/std:c++17)

如果其空白,则默认为C++14

您需要在VS2017中打开C 17支持。默认情况下,VS2017将C 14用于新项目。要打开C 17在命令行中使用/std:c++17或转到Project-> properties-> Language-> C 语言标准,然后选择/std:c++17

您也可以使用/std:c++latest并获得最新/实验支持