Path structures have a function nth(int n) for getting the n th arc of the path. I suggest operator[] as an alias for this function.
It would be nice to have source() and target() functions for paths. But it raise questions.
Is it necessary that all the arcs in a path are directed in the same direction? Or we could store oppositely directed arc in a path as well? How should we define the source/target? Would the source node be equal to gr.source(path.front()) and the target to gr.target(path.back())?
Should paths store source and target nodes explicitly? It would make it possible to handle paths of zero length (with a specified starting node).