I dont see why this requirement is one of the esoteric ones as traversing the
set of all vertices incident to another vertex is a often used operation and I
still do not undertand why out_edges is used for this. Why is there no
explicit function for this purpose?

For an undirected graph there is, by definition/no source or target vertex implicit in the edge. And yet, source() and target() are still required for an undirected graph to behave properly with virtually every BGL algorithm. I used the term "esoteric" because this requires you to apply directional semantics to undirected edges, which is somewhat contradictory and imposes some interesting implementation requirements.

The out_edges() requirement is a badly stated requirement that is trying to describe source/target requirements for undirected graphs, but do so in a way that precludes an implementation of graphs that contain loops. As such you should probably ignore the requirement.

Explicit function for what?
 
Andrew Sutton
andrew.n.sutton@gmail.com