当我尝试使用BCC64(基于Clang)编译以下代码时,出现“枚举不能是模板”的错误:
起初,我认为这个显式禁止是由于枚举底层类型的限制,如果枚举底层类型可以作为模板参数,那么可能会导致不合规的枚举,但当我们尝试这样做时:
只要类型
template <typename T> enum class fooEnum : T
{
a,b,c,d,e
};
起初,我认为这个显式禁止是由于枚举底层类型的限制,如果枚举底层类型可以作为模板参数,那么可能会导致不合规的枚举,但当我们尝试这样做时:
template <typename A> struct fooClass
{
enum class fooEnum : A
{
a,b,c,d,e
};
};
只要类型
A
遵循与枚举基础类型相同的限制,也就是定义枚举值的表达式,它就可以编译通过:
- 必须是一个整数常量,足以容纳枚举的所有值
- 每个枚举类型必须与
char
或signed
/unsigned
整数类型兼容。
enum class fooEnum : fooClass
{
a,b,c,d,e
};
非整型类型'fooClass'是无效的基础类型
因此,我想知道为什么即使已经对基础类型有控制,也明确禁止创建模板枚举。在标准文档的哪里提到了这个禁令?
感谢您的关注。