#pragma once #include template class ListRange; template class ListIterator; template struct ListLink { ListLink * prev; ListLink * next; T value; }; template class List { public: size_t size(); void push_back(T el); void pop_back(); void clear(); T & operator [] (size_t index); ListIterator begin(); ListIterator end(); ListRange range(); private: ListLink * head = nullptr; ListLink * tail = nullptr; size_t length = 0; }; #include "List.hpp"