In general, I'm anti-boost, but I think it's a personal bias and we use the hell out of it at work to great effect. The one thing I'll give boost::intrusive over sys/queue.h is that the type system helps you a lot more to catch issues and the common case is a bit simpler (a struct that exists in a single linked list and a single hash table, for example).
I've been burned many times by something like the following
struct foo {
TAILQ_ENTRY(foo) lru_entry;
TAILQ_ENTRY(foo) hash_entry;
};
...
void some_magic_func(struct foo *f) {
TAILQ_REMOVE(static_tailq, f, hash_entry); // oops, should be lru_entry!
}
Boost intrusive templatizes on the member as well (IIRC) and eliminates this whole class of problem.