A data structure is intrusive if it requires help from the stored elements to function.
For example, a non-intrusive linked-list:
template <typename T>
struct Node {
T value;
Node* next = nullptr;
Node* previous = nullptr;
};
template <typename T>
struct List {
Node* head;
Node* tail;
};
List<int> list;
And below is an intrusive list:
struct IntNode {
IntNode value;
IntNode* next = nullptr;
IntNode* previous = nullptr;
};
template <typename Node>
struct List {
Node* head;
Node* tail;
};
List<IntNode> list;