I looked at this and found two problems:
1) Many list instantiations do not initialise their sentinel, like it should be done in ilist_sentinel_traits:: ensureHead()
This can be fixed easily. Even in ilist.h, so that not all usages of ilist must be modified.
2) Some list instantiations use only a ilist_half_node instead of a ilist_node for the sentinel.
This is OK for all list operations, except getPrevNode() and getNextNode().
I assume that ilist_half_node is used to save space (the next-pointer).
Now the question is: should all sentinels be changed to ilist_node. This will fix getPrevNode() and getNextNode()?
Or should it stay like it is and specify that getPrevNode()/getNextNode() cannot be used on lists which have a ilist_half_node sentinel?
Thanks,
Erik