visit
root->visit([&](node &n, node *) {
root->visit([&](node &n, node *) {
root->visit([&](node &n, node *) {
behavior = c->visit(fn, this);
visit_behavior visit(std::function<visit_behavior(node&, node*)>, node *parent);