KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
When answering this question I made some research which really confuses me. I noticed that two ifstreams that succesfully open are not equal but two ifstreams that fail are. At first i checked cplusplus.com. The operator ! returns the status of the badbit and failbit. I think that the opposite of this would still be to return the status of these two bits, but flipped. Wrong , because two succesful calls are not equal. So then I figured it was an operator bool somewhere that would return something. So I tried to backtrack from ifstream and found the istream::operator bool() , which is returning _Ok . Still wrong however , this doesn't seem to be called at all (and couldn't be, since the two successful calls are still not equal). So I changed my approach and checked the disassembly from Visual Studio. And what do I find? if (file0 != file1) { doesn't call the operator bool() , but rather the operator void* () (or really __imp_std::ios_base::operator void * ). So the questions I have are.. Shouldn't any operator bool () found be called before trying to casting it to pointer values? Is it some operator bool() I missed that in turn is calling the operator void* ? Is this some optimizing that I don't understand? Or am I completely wrong in that C++ actually thinks that void* is a better match than bool in this comparison?
Tags (comma-separated)
Save Edits
Cancel