[1] For undirected graphs, the edge (u,v) is the same as edge (v,u), so without some extra guarantee an implementation would be free use any ordering for the pair of vertices in an out-edge. For example, if you call out_edges(u, g), and v is one of the vertices adjacent to u, then the implementation would be free to return (v,u) as an out-edge which would be non-intuitive and cause trouble for algorithms. Therefore, the extra requirement is added that the out-edge connecting u and v must be given as (u,v) and not (v,u).
So the answer to what I think Daniel is asking is "it won't work". In particular:
Currently our graph uses a pointer to an edge object as an edge descriptor. Getting the "source" using such an edge descriptor can't always return v since it has no way of knowing where the edge descriptor came from.
will cause algorithms like breadth_first_search to break.
I can change the edge descriptor to be a pair of vertices, which would solve the problem, but don't want to if not needed.
I think it's needed if algorithms like the BGL breadth_first_search are going to work. No?
-- Michael