On Dec 15, 2006, at 3:58 PM, Jeff Cohen wrote: > I'll look into making this change. > > Part of the problem is that VC++ doesn't like *OS.stream() in a header > file when <ostream> isn't included, even if the declaration of > std::basic_ostream shouldn't be needed (but doesn't have a problem > with > it in a .cpp file, probably because it isn't inlined then). This > would > appear to be a bug, but it also constrains my options. > > I could also just undo the change and go back to including > <ostream> in > the header files. Gcc must be doing it implicitly anyway, as > that's the > only way some of that code can compile (which does need the > declaration > of std::basic_ostream).
If *OS.stream() isn't working, it seems likely that LLVMStream.h isn't getting #included. Alternatively, perhaps <iosfwd> isn't? -Chris > > Bill Wendling wrote: >> That's reasonable. So then a better solution would be to keep >> everything in the .h file, but change operator<<(OStream&) to call >> the >> "print()" function directly. So something like this: >> >> #include <iosfwd> >> >> // ... >> >> OStream& operator<<(OStream &OS, const MachineBasicBlock &MBB) { >> if (*OS.stream()) MBB->print(*OS.stream()); >> return OS; >> } >> >> I'm still working on a nice way of implementing something like this: >> >> template <typename StreamTy> >> class BaseStream { >> StreamTy *stream; >> public: >> operator StreamTy () { return *stream; } >> }; >> >> but I'm having problems figuring out the "null" stream semantics >> (right now, it uses "stream = 0" as an indication that it's "null"). >> But the above hack should suffice in the meantime. >> >> -bw > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits