...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
<boost/functional/hash/*.hpp>
headers. Now a single header,
<boost/functional/hash.hpp
>
is used.
BOOST_HASH_NO_EXTENSIONS
macro, which disables the extensions to TR1.
long long
,
std::complex
.
long double
.
fpclass
which doesn't support long
double
.
errno
.
std::numeric_limits
.
long
long
and unsigned
long long
.
long
double
and float
as the C++ overloads aren't always availables.
boost/functional/detail
,
since they are part of functional/hash, not functional. boost/functional/detail/container_fwd.hpp
has been moved to boost/detail/container_fwd.hpp
as it's used outside of this library, the others have been moved to boost/functional/hash/detail
.
BOOST_DETAIL_NO_CONTAINER_FWD
macro.
BOOST_HAS_*
macros.
hash_value
by defining BOOST_HASH_NO_IMPLICIT_CASTS
.
When using boost::hash
for a type that does not have hash_value
declared 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.
-Wconversion
flag.
-Wfloat-equal
warning.
std::array
and std::tuple
when available.
boost/functional/detail/container_fwd.hpp
.