X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f From: "Anthony" Newsgroups: comp.os.msdos.djgpp Subject: Why does this code fails? Date: Thu, 11 Mar 2004 14:11:07 +0300 Organization: Radio-MSU NOC, Moscow State University Lines: 50 Message-ID: NNTP-Posting-Host: integra.rmt.ru X-Trace: alpha2.radio-msu.net 1079003488 40555 81.13.30.150 (11 Mar 2004 11:11:28 GMT) X-Complaints-To: usenet AT radio-msu DOT net NNTP-Posting-Date: Thu, 11 Mar 2004 11:11:28 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com #include #include #include class mystream { private: std::ostream *pstream; public: mystream(std::ostream& s) : pstream(&s) {} mystream() : pstream(NULL) {} operator std::ostream&() throw(std::runtime_error) { if(pstream) { return *pstream; } else { throw std::runtime_error("Convertion of NULL stream."); } } void assign(std::ostream& s); ... }; mystream mstr; int main() { mstr.assign(std::cout); try{ static_cast(mstr) << "Hello world"; // This compiles fine mstr << "Hello world"; // This gives error 'no match for operator<< 'in mstr << "Hello world"' } catch(std::runtime_error& err) { std::cerr << "\n ERROR: " << err.what(); } std::cin.get(); return 0; } ------------------------------------- Why doesn't convertion by default work? How to make it work with no cast-ing? The goal is to have a global static reference to a stream, where some code can do output and another code can change this output destanation, like make it go to cout, then after sometime to a file stream, etc. Is there better way to do this than this code? Thanks.