On 12/29/2009 02:22 PM, Peter Kümmel wrote:
After the reply to JMarc I also tought about a template solution. Attached a patch, but it's tested only with msvc.
Don't you only need the one specialization, if all the others are different? rh
LyXErr& operator<<(LyXErr& l, void const * t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, char const * t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, char t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, int t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, unsigned int t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, long t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, unsigned long t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, double t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, string const& t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, docstring const& t) -STREAM_OPERATOR(to_utf8(t)); +{ return toStream(l, to_utf8(t)); } LyXErr& operator<<(LyXErr& l, FileName const& t) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, ostream&(*t)(ostream&)) -STREAM_OPERATOR(t) +{ return toStream(l, t); } LyXErr& operator<<(LyXErr& l, ios_base&(*t)(ios_base&)) -STREAM_OPERATOR(t) +{ return toStream(l, t); }
Peter