В вашем определении класса оператор преобразования operator bool
объявлен с квалификатором const
, но объекты, используемые в операторах if, не являются константными объектами.
operator bool() const
^^^^^
{
printf("operator bool()\n");
return m;
}
Удалите классификатор const
, и будет вызван оператор operator bool
.
Или объявите оператор преобразования operator int *
как
operator const int* () const
{
printf("operator int* ()\n");
return &m;
}
иснова будет вызван оператор operator bool
.
Когда оператор имеет квалификатор const и применяется к непостоянному объекту, требуется еще одно преобразование, которое является преобразованием квалификации.
Более тогоВы можете объявить оператор даже как явный. Например
explicit operator bool()
{
printf("operator bool()\n");
return m;
}