19 : Root_{
nullptr,
nullptr, tag}
35 void PushBack(std::unique_ptr<T>&& node) {
40 Tail_->Next = std::move(node);
41 Tail_ = Tail_->Next.get();
46 std::unique_ptr<T> Erase(T* node) {
48 assert(node != &Root_);
50 if (node->Tag != Tag_) {
54 std::unique_ptr<T>& owner = node->Prev->Next;
55 std::unique_ptr<T> result = std::move(owner);
56 owner = std::move(node->Next);
59 owner->Prev = node->Prev;
64 result->Next =
nullptr;
65 result->Prev =
nullptr;
73 return Root_.Next.get();
76 std::unique_ptr<T> PopFront()
noexcept {
77 auto result = std::move(Root_.Next);
78 Root_.Next = std::move(result->Next);
81 Root_.Next->Prev = &Root_;
86 result->Next =
nullptr;
87 result->Prev =
nullptr;