Why does BGL use friend instead of member functions?