I got it to work... I'll be committing shortly. I'm not sure what the problem was, but it seems to have something to do with resolving the overload of operator<< and almost certainly is a VC++ bug. It won't accept a forward declared type when it ought to.
Chris Lattner wrote: > > 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