Dlaczego tak
Funkcja zaprzyjaźniona jest zwykłą funkcją zewnętrzną — nie ma wskaźnika this i wywołuje się ją jako iloczyn(u, v) — ale deklaracja friend wewnątrz klasy daje jej dostęp do składowych prywatnych, więc odczyt u.x i v.y jest poprawny. Dla wektorów (1, 2) i (3, 4) zwróciłaby 1 · 3 + 2 · 4 = 11. Bez słowa friend kompilator rzeczywiście zgłosiłby błąd dostępu do pól prywatnych.