gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:20:47 40 4
gpt4 key购买 nike

我正在使用 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++ 的错误吗?

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

最佳答案

如果您使用 Standards Conformance Mode,您的代码将被编译。编译器选项 /permissive- 指定符合标准的编译器行为。

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

关于c++ - 为什么 Visual Studio C++ 编译器拒绝将枚举作为模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57612029/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com