T &append(Args&&... a) { list_end = emplace_after(list_end, new T{a...}); return *static_cast<T *>(list_end->get()); }
T &append(Args&&... a) { list_end = emplace_after(list_end, new T{std::forward<Args>(a)...}); return *static_cast<T *>(list_end->get()); }