agile: open Visitor with std::function for each visit method
agile: open Visitor adaptor for usage in ranges