indirect_iterator_generator<list<shared_ptr<X> >::iterator> again