为什么Visual Studio C ++编译器拒绝将枚举作为模板参数?

哈里·瓦格斯塔夫(Harry Wagstaff):

我正在使用Microsoft Visual Studio 2019编译器(cl.exe),它拒绝了Clang和GCC接受的一些代码,这些代码与将枚举用作模板参数有关,其中模板专门用于特定的枚举值。

enum Foo {
    Bar,
    Baz
};

template<enum Foo = Bar> class Clazz {

};

template<> class Clazz<Baz> {

};

VC ++编译器报告模板专业化方面的一些错误:

<source>(10): error C2440: 'specialization': cannot convert from 'Foo' to 'Foo'
<source>(10): note: Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)

Clang和GCC均接受此代码,没有错误。这是VC ++的错误吗?

用“ int”代替模板声明中的“ enum Foo”会导致错误消失。但是,这不是可接受的答案,因为我正在尝试将大型代码库移植到VC ++。

高炉:

如果使用“ 标准符合性模式”编译器选项/permissive-来指定符合标准的编译器行为,则将编译您的代码

您可以在命令行或“项目属性页-> C / C ++->语言->一致性模式”中添加该选项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么Visual Studio Community 2017 C ++标准C ++ 98?

为什么C#编译器允许空枚举?

为什么允许此代码在Visual Studio 2013下编译?

是否可以将Visual C ++ v120编译器工具集添加到Visual Studio 2015?

Visual Studio C ++编译器怪异行为

为什么C#编译器不能将文字上的负值转换为枚举?

Visual Studio 2013中可能的C / C ++编译器错误

使用Visual Studio编译器分析内联的C ++函数

为什么此C代码在Codeblock中而不在Visual Studio中进行编译?

在C ++中,为什么某些编译器拒绝将仅包含double的对象放入寄存器?

为什么Visual Studio在C#文本编辑器中使单词'String'变暗

为什么Visual Studio 2019不编译我的代码?

为什么Visual Studio允许我在模板函数(C ++)中使用私有成员?

Visual Studio生成“错误:未初始化的本地变量'x'”,而在线编译器不生成-为什么?

Visual Studio 2019 C ++对概念的支持-成功编译并出现错误:为什么?

为什么C编译器允许从uint16_t静默转换为枚举类型?

使用g ++编译器在Visual Studio中编译C ++程序会在最后生成%

为什么C4996上的Visual Studio 2013错误?

C ++:使用Visual Studio编译器时的const指针

拆解Visual Studio Intel编译器C ++代码

使用Atmel Studio作为通用C编译器

Visual Studio 2015中的编译器是什么

为什么Android的Visual Studio模拟器不再启动?

哪些编译器选项用于在Visual Studio中编译C ++ STL类/函数?

使用 Visual Studio 2017 构建 SSDT 项目时如何将 /unsafe 标志传递给 C# 编译器

Visual Studio Code 的 C/C++ 扩展如何找到默认编译器?

为什么我的 Visual Studio 项目模板的描述不显示?

Visual Studio C++ 编译器尝试编译 CUDA C/C++ 文件

如何使用 Visual Studio 编译器在 Windows 上编译 cython 编译的 c 代码