Пример

class MyClass {
public:
MyClass(int param, int param2=0);
operator double() const;
bool operator==(const MyClass& left, const MyClass& right);
private:
double num;
};

int main(int argc, char* argv[]){
MyClass a;
int b[] = {0,1,2};
for(int i=0; i<3; i++)
if( a == b[i] ){
//b[i] неявно преобразована к типу MyClass
}
}
}

Решение
Для конструкторов с одним аргументом (но не конструкторов копирования) или конструкторов, которые могут быть использованы компилятором для преобразования, необходимо объявлять конструктор явным образом. Вместо использования операторов неявного преобразования типов, которые могут быть неоднозначно восприняты компилятором, применяйте пользовательские методы явным образом.

class MyClass {
public:
explicit MyClass(int param, int param2=0);
double toDouble() const;
bool operator==(const MyClass& left, const MyClass& right);
private:
double num;

};

int main(int argc, char* argv[]){
MyClass a;
int b[] = {0,1,2};
for(int i=0; i<3; i++)
if( a.toDouble() == b[i] ){
//a преобразована к типу double явным образом
}
}
}