#include #include namespace icl{ template std::ostream &operator<<(std::ostream &s, const Range &range){ s << '['; icl_to_stream(s,range.minVal); s << ','; icl_to_stream(s,range.maxVal); return s << ']'; } template std::istream &operator>>(std::istream &s, Range &range){ char c; s >> c; icl_from_stream(s,range.minVal); s >> c; icl_from_stream(s,range.maxVal); return s >> c; } #define ICL_INSTANTIATE_DEPTH(D) \ template std::ostream &operator<<(std::ostream&,const Range&); \ template std::istream &operator>>(std::istream&,Range&); ICL_INSTANTIATE_ALL_DEPTHS #undef ICL_INSTANTIATE_DEPTH }