The implementation of `List::front()` is wrong. I think it should be `T& front() { return static_cast<Link<T>*>(first)->val; }`