Das ist im Standard nicht spezifiziert. Die Adresse ist das Ergebnis des operator void*() in basic_ios; dieser gibt NULL zurück, wenn fail() wahr ist (also ein failbit gesetzt ist), ansonsten irgendeinen anderen Wert. Die Idee ist, den Stream einfach auf seine Gültigkeit überprüfen zu können, etwa so:
Das ist einfach ein Operator, d.h. damit auch eine Funktion, die dir einen Typ automatisch in einen void* "castet". So versteht er im obigen Code z.B., dass cout void* ausgeben kann und versucht dementsprechend cin in ein void* umzuwandeln und dafür wird der entsprechende Cast-Operator herangezogen. -- Demokratie ist die Diktatur der Mehrheit.