...one of the most highly
regarded and expertly designed C++ library projects in the
world. — Herb Sutter and Andrei
<boost/functional/hash/*.hpp>headers. Now a single header, <
boost/functional/hash.hpp> is used.
BOOST_HASH_NO_EXTENSIONSmacro, which disables the extensions to TR1.
fpclasswhich doesn't support
unsigned long long.
floatas the C++ overloads aren't always availables.
boost/container_hash/detail, since they are part of functional/hash, not container_hash.
boost/container_hash/detail/container_fwd.hpphas been moved to
boost/detail/container_fwd.hppas it's used outside of this library, the others have been moved to
BOOST_HASH_NO_IMPLICIT_CASTS. When using
boost::hashfor a type that does not have
hash_valuedeclared but does have an implicit conversion to a type that does, it would use that implicit conversion to hash it. Which can sometimes go very wrong, e.g. using a conversion to bool and only hashing to 2 possible values. Since fixing this is a breaking change and was only approached quite late in the release cycle with little discussion it's opt-in for now. This, or something like it, will become the default in a future version.
hash_valuenow implemented using SFINAE to avoid implicit casts to built in types when calling it.
enumsupport, which was accidentally removed in the last version.
boost::uint128_typewhere available - currently only
unsigned __int128on some versions of gcc.
hash_combine. This changes the combine function which was previously defined in the reference documentation.
std::wstringwhen we know we have a
wchar_t. Otherwise there's a compile error as there's no overload for hashing the characters in wide strings (#8552).
vector<bool>when using libc++. Will try to introduce a more general fix in the next release.