Include <utility> when using std::move
diff --git a/gen/write.rs b/gen/write.rs
index a75d4c0..16322c1 100644
--- a/gen/write.rs
+++ b/gen/write.rs
@@ -178,6 +178,7 @@
 
     if needs_manually_drop {
         out.next_section();
+        out.include.utility = true;
         writeln!(out, "template <typename T>");
         writeln!(out, "union ManuallyDrop {{");
         writeln!(out, "  T value;");
@@ -329,6 +330,7 @@
                 arg.ident,
             );
         } else if types.needs_indirect_abi(&arg.ty) {
+            out.include.utility = true;
             write!(out, "::std::move(*{})", arg.ident);
         } else {
             write!(out, "{}", arg.ident);
@@ -347,6 +349,7 @@
     writeln!(out, ";");
     if efn.throws {
         out.include.cstring = true;
+        out.include.exception = true;
         writeln!(out, "    throw$.ptr = nullptr;");
         writeln!(out, "  }} catch (const ::std::exception &catch$) {{");
         writeln!(out, "    const char *return$ = catch$.what();");
@@ -410,6 +413,7 @@
         writeln!(out, " {{");
         for arg in &efn.args {
             if arg.ty != RustString && types.needs_indirect_abi(&arg.ty) {
+                out.include.utility = true;
                 write!(out, "  ::rust::ManuallyDrop<");
                 write_type(out, &arg.ty);
                 writeln!(out, "> {}$(::std::move({0}));", arg.ident);
@@ -481,6 +485,7 @@
             writeln!(out, "  }}");
         }
         if indirect_return {
+            out.include.utility = true;
             writeln!(out, "  return ::std::move(return$.value);");
         }
         writeln!(out, "}}");
@@ -668,6 +673,8 @@
 }
 
 fn write_unique_ptr(out: &mut OutFile, ident: &Ident) {
+    out.include.utility = true;
+
     let mut inner = String::new();
     for name in &out.namespace {
         inner += name;