anchor.diff:  	<%}%>
   
   private:
  -	void undo_malloc(size_t s);
  +	void undo_malloc(size_t size);
   
   	template <typename T>
   	static void object_destructor(void* obj);
  +
  +	typedef msgpack_zone base;
   
   private:
   	zone(const zone&);
  
positive.code: 	reinterpret_cast<T*>(obj)->~T();
  }
  
  inline void zone::undo_malloc(size_t s)
  {
  	msgpack_zone_chunk* chunk = chunk_array.tail;
  	chunk->ptr  -= s;
  	chunk->free += s;
  }
  
  <%0.upto(GENERATION_LIMIT) {|i|%>
  
negative.code: 	try {
  		return new (x) T(<%=(1..i).map{|j|"a#{j}"}.join(', ')%>);
  	} catch (...) {
  		--base::finalizer_array.tail;
  		undo_malloc(sizeof(T));
  		throw;
  	}
  