Почитал предложенные ссылки, проверил на доступных сейчас компиляторах
Код:
if (int ok(123))
{
}
Один считает это синтаксической ошибкой, другой уточняет, что ему не нравится инициализация переменной в условии.
Если цель стояла в создании класса и приведении его к bool, можно было сделать: if (SomeClass(123)) ...
[code]
class A
{
public:
explicit A(int) {}
operator bool() const {return false;}
};
int main()
{
for(A a (123); A b(123)/*ошибка*/; ) {}
if (A a(123)/*ошибка*/)
{
///
}
return 0;
}
[code]
Короче, я понял, что дело в объявлении переменных:
Код:
bool(A a(123))
- ошибка
По поводу "пыльных углов":
попродуйте код:
Код:
std::vector<A*> as;
// fill some way with operator new
std::for_each(as.begin(), as.end(), delete);
Ничего не уничтожится.