Рассмотрим следующий код:
class C {
public:
int operator-(int x) {
return 3-x;
}
};
class wrapper {
public:
operator C() {
static C z;
return z;
}
} wrap;
int main() {
return wrap-3;
}
выдает эту ошибку на g ++:
test.cpp: In function ‘int main()’:
test.cpp:17:17: error: no match for ‘operator-’ in ‘wrap - 3’
Оператор преобразования работает, потому что эта версия работает:
class wrapper {
public:
operator int() {
static int z=3;
return z--;
}
} wrap;
int main() {
return wrap-3;
}
operator-
также, кажется, работает, потому что этот код компилируется:
class C {
public:
int operator-(int x) {
return 3-x;
}
};
int main() {
C c
return c-3;
}
Что не так с комбинацией этих двух?Почему нельзя применить оператор после неявного преобразования?Есть ли обходные пути к этой проблеме?