大约一个小时前,我为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++ 17支持,我使用了类似的方法:
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

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

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

08-27 22:23