大约一个小时前,我为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
。