enumeration cannot be a template
是我尝试使用BCC64(基于 Clang)编译以下代码时给出的错误:
template <typename T> enum class fooEnum : T
{
a,b,c,d,e
};
起初,我认为这个明确的禁止是由于enum
底层类型限制,如果枚举底层类型可以被模板化,那么它可能导致格式错误的枚举,但是当我们尝试这个时:
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' 是无效的基础类型
所以,这就是为什么我想知道为什么即使已经对底层类型进行了控制,为什么也明确禁止创建模板枚举。标准中哪里提到了这个禁令?
感谢您的关注。