In essence, hidden friends are non-member functions defined in the body of the type that declares them as a friend. This makes such functions impossible to call in ways other than by using Argument-Dependent Lookup (ADL), effectively making them hidden. Because they reduce the number of overloads a compiler considers, they also speed up compilation. A bonus of this is that they provide shorter error messages than their alternatives. Their last interesting property is that they cannot be called if an implicit conversion should happen first. This can help you avoid such accidental conversions.
Although friends in C++ are generally not recommended, things look differently for hidden friends; if the advantages from the previous paragraph don't convince you, you should also know that they should be the preferred way of implementing customization points. Now, you're probably wondering what those customization points are. Briefly speaking, they are callables used...