Slightl cleanup of type names - using typename Iterable<T>::_SharedPtrIRep instead of shared_ptr<typename Iterable<T>::_IRep>