If you look at the Boost intrusive algorithms you notice that many of them have an option to be used as hook or member.

For smaller algorithms this doesn't really matter as the code is likely to be inlined, like the linked list for example.
The member version use a member to parent offset trick to get the address of the object rather than the member in order to make the algorithms more general.

This little difference of the member offset, forces the code to be unique for every member offset of the algorithm which adds more code. What if you stored the parent to member offset in the algorithms class instead. That way the code will be the same for all types and member offsets. The question here is if modern C++ compilers can detect this and only instantiate the code once despite the type and member position are different.

Also, the member algorithm is a more general approach as it can be added several times to the same class so the question is why the hook option was added at all.