Friend functions This requires access to List internals Classes can declare functions as being friends The function can then access class internals class List { // ... friend ostream& operator<< (ostream &os, const List &list); };