如何获得支持枚举的类型

Ujj*_*wal 3 c++

我想编写一个测试来检测枚举的基础类型,并且该测试用例应该与编译器无关。

我不能使用std::underlying_type__underlying_type以及其他编译器具体实施

dor*_*ron 6

GCC具有__underlying_type (type)编译器固有的功能。内在函数是编译器在内部实现的特殊功能。

其他编译器可能以类似的方式工作。


pmd*_*mdj 5

这是实现定义的。例如,对于 clang,它是通过__underlying_type(type)编译器功能实现的。同样对于 GCC

不使用std::underlying_type标准库的主要原因是在没有标准库可用的环境中。(嵌入式、内核等)通常在这种情况下,您将针对一组封闭的编译器,因此您可以std::underlying_type使用每个编译器的必要的特定于实现的功能,为您单独针对的每个编译器重新实现。

  • @Ayxan 不,只是所有包含`__` 的名称都保留用于实现。 (5认同)
  • @Ayxan - 它只是为植入保留的标识符命名空间。实现既可以在内部使用它,也可以公开具有这些名称的函数。UB 是如果*您* 尝试*定义* 这样的名称,而不是如果您使用实现提供的名称。 (3认同)