~chapter 9 templates abstract complete