hash_value is not overloaded for arrays for older versions of Visual C++. There is a work around so that boost::hash<T[N]>, boost::hash_combine and boost::hash_range work.

On these compilers the wrong overload of hash_value is called when the argument is a hash function pointer. So calling hash_value doesn't work but boost::hash does work (and it's recommended that user never call hash_value directly so this shouldn't be a problem).

This platform has poor support for `long double` so the hash function perform poorly for values out of the range of `double` or if they differ at a greater precision that `double` is capable of representing.

These examples only work on compilers with support for ADL. It is possible to work around this, but I wanted to keep the example code as clean as possible.

It appears that Borland doesn't find friend functions defined in a class by ADL. This is easily fixed but this example is meant to show the typical way of customising boost::hash, not the portable way.

The test demonstrates a Borland bug - functions that aren't in a namespace don't appear to be found by ADL.

Debug containers aren't supported on Apple's version of gcc 4.2.