Move op_overload into a visitor class