У меня есть класс, который упаковывает перечисление для легкой печати, сериализации и т. Д.
Я хочу иметь возможность использовать его в операторе switch в качестве традиционного перечисления, поэтому я использовал перегрузчик int () до gcc-4,3.Однако мой код теперь ломается: gcc-4.5.1 .
enum E { consta, constb };
class Wrap {
private:
E e;
public:
operator E() { return e;}
operator E() const { return e;}
operator int() const { return e;}
Wrap(E a) : e(a) { }
};
int main() {
Wrap x(constb);
x = consta;
switch (x) { /* Error here */
case consta: // ..
case constb: // ..
}
return 0;
}
Ошибки компилятора:
ошибка: неоднозначное преобразование типов по умолчанию из 'Wrap'
ошибка: кандидатпреобразования включают в себя 'Wrap :: operator E () const' и 'Wrap :: operator int () const'
Это часть библиотеки, и я хочу, чтобы код работал над всеми версиями, следовательно, удаляя intПерегрузчик не был опцией.