Visual Studio 2017 15.9.13 不能使用自动 C++ 模板
visual studio 2017 15.9.13 can't use auto c++ templates
我在大约一个小时前安装了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
并获得最新/实验支持
相关文章:
- .cpp和.h文件中的模板专用化声明
- C++模板来检查友元函数的存在
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 如何在c++中为模板函数实例创建快捷方式
- 使用C++中的模板和运算符重载执行矩阵运算
- 有人能分解一下这个c++模板的语法吗
- 如何在c++17中制作一个模板包装器/装饰器
- 模板化建造师专业化
- 调用专用模板时出错"no matching function for call to [...]"
- 模板元程序查找相似的连续类型名称
- 如何在C++20中创建模板别名的推导指南
- 没有名称的C++模板参数
- 具有重复类型的C++可变模板
- 如何将enable-if与模板参数和参数包一起使用
- 没有用于初始化C++中的变量模板的匹配构造函数