>>10
sometimes you need a function that is used as a method, but the thing acting as the this object is not the first parameter. The << operator used with streams is the basic example, and the only thing I use friend functions for. I'll use friend classes when defining helper data types that make up a private component of a larger data type. There is probably a work around this that would improve reuse, like abstracting the helper types to a more general function, but sometimes achieving that much generality doesn't always pay off.