假设有一个使用枚举类的 C++11 API:
// api.hpp
enum class E {A, B, C};
void f(E);
...
// api.cpp
void f(E e)
{
if (e == E::A)
...
}
现在假设我想使用这个 API,但我没有 C++11 编译器。所以我:
- 修改
api.hpp
枚举类并将其更改为常规枚举。 - 编写一些包含修改后的代码代码
api.hpp
并正常使用API(例如调用f
)。 - 使用我的非 C++11 编译器编译此代码,并将其链接到使用 C++11 编译器编译的 API 实现(使用未修改的
api.hpp
)。
这似乎适用于 GCC,但总的来说它是安全的,还是我在玩火(违反 ODR 等)?
假设这两个编译器在其他方面是链接兼容的,那么只有 enum 与 enum 类有问题。