Как происходит конвертация объектов fstream(ifstream/ofstream) в bool

Мне не особо понятно, каким образом объекты классов fstream/ofstream/ifstream конвертируются в bool. Все, что я нашел, это то, что конвертация происходит путем каста к void* и при достижении конца файла мы получаем 0(false). Теперь вопросы:как вообще происходит конвертация? Что мы получаем, как результат каста (адрес на что?)? Что мы получаем, если файл не удается открыть? Можно ли выражения if(!file) использовать как полноценный заменитель file.is_open()? Я так понимаю, что каст проверяет флаги состояния и, если не goobit, то возвращается false. Пример кода:

#include <iostream>
#include <fstream>


int main() {
    std::ifstream file("someFile.txt");

    if(!file) {
        std::cout << "It\'s fine\n";
    }
    else {
        std::cout << "End\n";
    }
}

Ответы (1 шт):

Автор решения: Shamil Mukhetdinov

Нашел на англоязычном StackOverflow:вот здесь. is_open() проверяет, открыт ли файл и игнорирует все выставленные флаги и готовность файла к вводу/выводу. Каст к bool, в первую очередь, опирается на флаги. Поэтому, если вы сделаете так std::ifstream file, то is_open() выдаст false, а (file) - true.

Дополнено: Ответ найден Здесь

→ Ссылка