Pap*_*ter 5 c++ templates c++11 enum-class
enumeration cannot be a template是当我尝试使用BCC64(基于 Clang)编译以下代码时给出的错误:
template <typename T> enum class fooEnum : T
{
a,b,c,d,e
};
Run Code Online (Sandbox Code Playgroud)
起初,我认为这个明确的禁止是由于enum底层类型限制,如果枚举底层类型可以被模板化,那么它可能会导致格式错误的枚举,但是当我们尝试这样做时:
template <typename A> struct fooClass
{
enum class fooEnum : A
{
a,b,c,d,e
};
};
Run Code Online (Sandbox Code Playgroud)
只要A类型遵循与枚举底层类型相同的限制,它就可以毫无问题地编译,您知道,定义枚举值的表达式:
char或 一个signed/unsigned整数类型兼容。如果我们不遵循此规则,(使用类内枚举或全局枚举)会出现另一个特定错误,正如预期的那样:
enum class fooEnum : fooClass
{
a,b,c,d,e
};
Run Code Online (Sandbox Code Playgroud)
非整数类型“fooClass”是无效的基础类型
所以,这就是为什么我想知道为什么即使已经控制了底层类型,也明确禁止创建模板枚举。标准上哪里提到了这个禁令?
感谢您的关注。
| 归档时间: |
|
| 查看次数: |
987 次 |
| 最近记录: |