Iterator, smart pointer, template