मान लीजिए enum कक्षाओं का उपयोग करता है एक सी ++ 11 एपीआई है:लिंक संगतता और enum कक्षाएं
// api.hpp
enum class E {A, B, C};
void f(E);
...
// api.cpp
void f(E e)
{
if (e == E::A)
...
}
अब मैं इस एपीआई का उपयोग करना चाहते हैं लगता है, लेकिन मैं एक सी + की जरूरत नहीं है +11 संकलक। तो मैं:
api.hpp
संशोधित करें और enum क्लास को केवल एक नियमित enum के रूप में बदलें।- कुछ कोड कोड लिखें जिसमें संशोधित
api.hpp
शामिल है और सामान्य रूप से API का उपयोग करता है (उदा।f
पर कॉल करें)। - इस कोड को मेरे गैर-सी ++ 11 कंपाइलर के साथ संकलित करें और इसे एपीआई कार्यान्वयन से लिंक करें जिसे सी ++ 11 कंपाइलर के साथ संकलित किया गया था (अनमोडिफाइड
api.hpp
का उपयोग करके)।
ऐसा लगता है कि यह जीसीसी के साथ काम करता है, लेकिन क्या यह सामान्य रूप से सुरक्षित है, या क्या मैं आग (ओडीआर उल्लंघन और ऐसे) के साथ खेल रहा हूं?
मान लें कि दो कंपाइलर्स अन्यथा लिंक-संगत हैं, यह केवल एनम बनाम एनम क्लास है जो मुद्दा पर है।