But doesn't that mean the Concepts for property access should reflect
what is actually required by a type? Or should the implementation
detail not be leaked in the first place?
The implementation probably shouldn't be leaked, but one could argue that no implementation details are being leaked in this case. If filtered graph adaptor defines the interface/implementation boundary, then clients of the adaptor would never have to see those typedefs. Since you're deriving from the adaptor, you're not the same kind of client. You're extending the library by creating a *new* adaptor and hence, have to deal with the implementation :)
Either way, it might be possible to move that logic into a metafunction that can be inherited by any adaptor and make extension a little easier.
Andrew Sutton