列挙型クラスを使用するC++11APIがあるとします。
// 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違反など)?
2つのコンパイラがリンク互換であると仮定すると、問題となるのはenumクラスとenumクラスだけです。