Based on some pre-review comments, I'm experimenting with refactoring the
unordered containers to use less macros to see how it comparse to the current
version. (This is not part of the review).
Instead of using macros to select the alternative inserts, give them different names and call them explicitly from the container class.
Remove all macro use from hash_table, moving it out of hash_table_impl.hpp (which is included twice, once for equivalent keys, once for unique keys) to hash_table.hpp
Make the allocators templated rather than macro based.
Hide the macro implemented hash_table_data behind an mpl if statement so that
the other classes don't need the whole data class as a template parameter.
Remove some of the alternative implementations. This makes things a bit less efficient, but it's probably okay in most cases.
Got a couple of assertions the wrong way round.
Move everything concerning nodes that is dependent on the node's structure into node_base.
Pull 'bucket' out HASH_TABLE_DATA in hash_table_impl.hpp into hash_table.hpp
Rename the two different node_base classes so that they can coexist.
Pull the two different node_base classes out of HASH_TABLE_DATA.
Use a template parameter for hash_table_data instead of a macro.
Move hash_table_data into hash_table.hpp
Only need a single templates 'hash_types' class.
No need for hash_types to know about hash_table_data.
Merge in changes from hash trunk. Most are in response to the review.
Merge in changes.