struct AST_node
{
	using ptr = std::unique_ptr<AST_node>;

	virtual ~AST_node() {}
	virtual void visit(AST_visitor*) = 0;
	virtual bool is_empty() const = 0;

	std::vector<std::unique_ptr<AST_node>> children;