
John Torjo wrote:
However, had I used crange<int> r(d); // how do I know what iterators to keep inside? crange<int> r(v); // how do I know what iterators to keep inside?
You keep a pointer to crange_impl_base<int> which points to a heap-allocated instance of crange_impl<int, d_array> (or crange_impl<int, v_array> or what have you) which is derived from crange_impl_base<int> and knows what iterators to keep inside. Not very efficient, but not technically impossible either. Another option is to write for (crange<int>& r = mkrange(d); r; ++r) { ... } where mkrange returns crange_impl<int, d_array> which is derived from crange<int>. This doesn't need heap allocation, but still needs virtual operator++ and virtual operator*. A smart compiler could in theory inline them anyway, but I wouldn't count on it. -- Anatoli Tubman PTC Israel (Haifa) Tel. (+972) 4-8550035 ext. 229