Предположит, есть 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, и привяжите его к реализации API, которая была скомпилирована с помощью компилятора C++ 11 (с использованием немодифицированного
api.hpp
).
Это похоже на работу с GCC, но безопасно ли вообще, или я играю с огнем (нарушения ODR и т. Д.)?
Предположим, что два компилятора в противном случае связаны с ссылкой, это только класс enum vs. enum.