add binary visitor
rename apply_visitor_double