// // intrusive_node.hpp // intrusive_list // // Created by Sam Jaffe on 1/7/17. // #pragma once template class intrusive_list; template class intrusive_node { public: typedef T value_type; typedef T& reference; typedef const T& const_reference; typedef T* pointer; typedef const T* const_pointer; private: typedef intrusive_node* self; public: intrusive_node() = delete; intrusive_node(const intrusive_node&) = delete; intrusive_node(intrusive_node&&) = delete; intrusive_node& operator=(const intrusive_node&) = delete; intrusive_node& operator=(intrusive_node&&) = delete; intrusive_node(pointer ptr); ~intrusive_node(); private: friend intrusive_list; friend intrusive_iterator >; friend const_intrusive_iterator >; void unlink( ); pointer ptr_ = nullptr; intrusive_list* list_ = nullptr; self next_ = nullptr; self prev_ = nullptr; };