Spell out std::unique_ptr constructor calls
diff --git a/internal/cgen/cgen.go b/internal/cgen/cgen.go
index bd00407..ea4cae1 100644
--- a/internal/cgen/cgen.go
+++ b/internal/cgen/cgen.go
@@ -1166,14 +1166,15 @@
 	b.writes("// On failure, the alloc_etc functions return nullptr. They don't throw.\n\n")
 	b.writes("static inline unique_ptr\n")
 	b.writes("alloc() {\n")
-	b.printf("return unique_ptr(%s%s__alloc(), &free);\n", g.pkgPrefix, structName)
+	b.printf("return std::unique_ptr<%s%s, decltype(&free)>(\n%s%s__alloc(), &free);\n",
+		g.pkgPrefix, structName, g.pkgPrefix, structName)
 	b.writes("}\n")
 	for _, impl := range n.Implements() {
 		iQID := impl.AsTypeExpr().QID()
 		iName := fmt.Sprintf("wuffs_%s__%s", iQID[0].Str(g.tm), iQID[1].Str(g.tm))
 		b.printf("\nstatic inline %s::unique_ptr\n", iName)
 		b.printf("alloc_as__%s() {\n", iName)
-		b.printf("return %s::unique_ptr(\n%s%s__alloc_as__%s(), &free);\n",
+		b.printf("return std::unique_ptr<%s, decltype(&free)>(\n%s%s__alloc_as__%s(), &free);\n",
 			iName, g.pkgPrefix, structName, iName)
 		b.printf("}\n")
 	}
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index e4d7f9b..090021b 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -4686,12 +4686,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_adler32__hasher__alloc(), &free);
+    return std::unique_ptr<wuffs_adler32__hasher, decltype(&free)>(
+        wuffs_adler32__hasher__alloc(), &free);
   }
 
   static inline wuffs_base__hasher_u32::unique_ptr
   alloc_as__wuffs_base__hasher_u32() {
-    return wuffs_base__hasher_u32::unique_ptr(
+    return std::unique_ptr<wuffs_base__hasher_u32, decltype(&free)>(
         wuffs_adler32__hasher__alloc_as__wuffs_base__hasher_u32(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)
@@ -4961,12 +4962,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_bmp__decoder__alloc(), &free);
+    return std::unique_ptr<wuffs_bmp__decoder, decltype(&free)>(
+        wuffs_bmp__decoder__alloc(), &free);
   }
 
   static inline wuffs_base__image_decoder::unique_ptr
   alloc_as__wuffs_base__image_decoder() {
-    return wuffs_base__image_decoder::unique_ptr(
+    return std::unique_ptr<wuffs_base__image_decoder, decltype(&free)>(
         wuffs_bmp__decoder__alloc_as__wuffs_base__image_decoder(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)
@@ -5201,12 +5203,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_crc32__ieee_hasher__alloc(), &free);
+    return std::unique_ptr<wuffs_crc32__ieee_hasher, decltype(&free)>(
+        wuffs_crc32__ieee_hasher__alloc(), &free);
   }
 
   static inline wuffs_base__hasher_u32::unique_ptr
   alloc_as__wuffs_base__hasher_u32() {
-    return wuffs_base__hasher_u32::unique_ptr(
+    return std::unique_ptr<wuffs_base__hasher_u32, decltype(&free)>(
         wuffs_crc32__ieee_hasher__alloc_as__wuffs_base__hasher_u32(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)
@@ -5455,12 +5458,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_deflate__decoder__alloc(), &free);
+    return std::unique_ptr<wuffs_deflate__decoder, decltype(&free)>(
+        wuffs_deflate__decoder__alloc(), &free);
   }
 
   static inline wuffs_base__io_transformer::unique_ptr
   alloc_as__wuffs_base__io_transformer() {
-    return wuffs_base__io_transformer::unique_ptr(
+    return std::unique_ptr<wuffs_base__io_transformer, decltype(&free)>(
         wuffs_deflate__decoder__alloc_as__wuffs_base__io_transformer(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)
@@ -5683,12 +5687,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_lzw__decoder__alloc(), &free);
+    return std::unique_ptr<wuffs_lzw__decoder, decltype(&free)>(
+        wuffs_lzw__decoder__alloc(), &free);
   }
 
   static inline wuffs_base__io_transformer::unique_ptr
   alloc_as__wuffs_base__io_transformer() {
-    return wuffs_base__io_transformer::unique_ptr(
+    return std::unique_ptr<wuffs_base__io_transformer, decltype(&free)>(
         wuffs_lzw__decoder__alloc_as__wuffs_base__io_transformer(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)
@@ -6127,12 +6132,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_gif__config_decoder__alloc(), &free);
+    return std::unique_ptr<wuffs_gif__config_decoder, decltype(&free)>(
+        wuffs_gif__config_decoder__alloc(), &free);
   }
 
   static inline wuffs_base__image_decoder::unique_ptr
   alloc_as__wuffs_base__image_decoder() {
-    return wuffs_base__image_decoder::unique_ptr(
+    return std::unique_ptr<wuffs_base__image_decoder, decltype(&free)>(
         wuffs_gif__config_decoder__alloc_as__wuffs_base__image_decoder(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)
@@ -6390,12 +6396,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_gif__decoder__alloc(), &free);
+    return std::unique_ptr<wuffs_gif__decoder, decltype(&free)>(
+        wuffs_gif__decoder__alloc(), &free);
   }
 
   static inline wuffs_base__image_decoder::unique_ptr
   alloc_as__wuffs_base__image_decoder() {
-    return wuffs_base__image_decoder::unique_ptr(
+    return std::unique_ptr<wuffs_base__image_decoder, decltype(&free)>(
         wuffs_gif__decoder__alloc_as__wuffs_base__image_decoder(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)
@@ -6663,12 +6670,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_gzip__decoder__alloc(), &free);
+    return std::unique_ptr<wuffs_gzip__decoder, decltype(&free)>(
+        wuffs_gzip__decoder__alloc(), &free);
   }
 
   static inline wuffs_base__io_transformer::unique_ptr
   alloc_as__wuffs_base__io_transformer() {
-    return wuffs_base__io_transformer::unique_ptr(
+    return std::unique_ptr<wuffs_base__io_transformer, decltype(&free)>(
         wuffs_gzip__decoder__alloc_as__wuffs_base__io_transformer(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)
@@ -6930,12 +6938,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_json__decoder__alloc(), &free);
+    return std::unique_ptr<wuffs_json__decoder, decltype(&free)>(
+        wuffs_json__decoder__alloc(), &free);
   }
 
   static inline wuffs_base__token_decoder::unique_ptr
   alloc_as__wuffs_base__token_decoder() {
-    return wuffs_base__token_decoder::unique_ptr(
+    return std::unique_ptr<wuffs_base__token_decoder, decltype(&free)>(
         wuffs_json__decoder__alloc_as__wuffs_base__token_decoder(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)
@@ -7197,12 +7206,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_wbmp__decoder__alloc(), &free);
+    return std::unique_ptr<wuffs_wbmp__decoder, decltype(&free)>(
+        wuffs_wbmp__decoder__alloc(), &free);
   }
 
   static inline wuffs_base__image_decoder::unique_ptr
   alloc_as__wuffs_base__image_decoder() {
-    return wuffs_base__image_decoder::unique_ptr(
+    return std::unique_ptr<wuffs_base__image_decoder, decltype(&free)>(
         wuffs_wbmp__decoder__alloc_as__wuffs_base__image_decoder(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)
@@ -7485,12 +7495,13 @@
 
   static inline unique_ptr
   alloc() {
-    return unique_ptr(wuffs_zlib__decoder__alloc(), &free);
+    return std::unique_ptr<wuffs_zlib__decoder, decltype(&free)>(
+        wuffs_zlib__decoder__alloc(), &free);
   }
 
   static inline wuffs_base__io_transformer::unique_ptr
   alloc_as__wuffs_base__io_transformer() {
-    return wuffs_base__io_transformer::unique_ptr(
+    return std::unique_ptr<wuffs_base__io_transformer, decltype(&free)>(
         wuffs_zlib__decoder__alloc_as__wuffs_base__io_transformer(), &free);
   }
 #endif  // defined(WUFFS_HAS_CPP11)