Giả sử có một API C++ 11 có sử dụng lớp enum:liên kết tương thích của enums và enum lớp
// api.hpp
enum class E {A, B, C};
void f(E);
...
// api.cpp
void f(E e)
{
if (e == E::A)
...
}
Bây giờ giả sử tôi muốn sử dụng API này, nhưng tôi không có một C + Trình biên dịch +11. Vì vậy, tôi:
- Sửa đổi
api.hpp
và thay đổi lớp enum thành một môi trường thường xuyên. - Viết một số mã bao gồm sửa đổi
api.hpp
và sử dụng API bình thường (ví dụ: cuộc gọif
). - Biên dịch mã này bằng trình biên dịch không phải C++ 11 của tôi và liên kết nó với API thực hiện được biên dịch bằng trình biên dịch C++ 11 (sử dụng chưa sửa đổi
api.hpp
).
Điều này dường như hoạt động với GCC, nhưng nói chung là an toàn, hay tôi đang chơi với lửa (vi phạm ODR và như vậy)?
Giả sử hai trình biên dịch tương thích với nhau, nó chỉ là lớp enum và enum đang được đề cập.