In Visual Studio 2010, the expression uses std::ios_base::operator void*() to determine if the condition is true or not. VS2010's implementation returns a null pointer (which is interpreted as false) if the fail() method returns true.
If this is your case too, then it means that during the last read the file stream invalidates somehow. Find out why fail() returns true and you will have found your problem.
What I'm saying is that your process of reading the stream into your personalized object is invalidating the stream somehow. You must always check for this either using fail() or good(). Go ahead and debug your program. Set a breakpoint in your operator>>() function and then go step by step. But first change the code to check for the value of good() every time after you extract data from the stream.