Add WUFFS_BASE__HAVE_EQ_DELETE
diff --git a/internal/cgen/base/all-impl.c b/internal/cgen/base/all-impl.c
index ca6ff08..c885818 100644
--- a/internal/cgen/base/all-impl.c
+++ b/internal/cgen/base/all-impl.c
@@ -35,6 +35,7 @@
 #ifdef __cplusplus
 #if (__cplusplus >= 201103L) || defined(_MSC_VER)
 #include <memory>
+#define WUFFS_BASE__HAVE_EQ_DELETE
 #define WUFFS_BASE__HAVE_UNIQUE_PTR
 #elif defined(__GNUC__)
 #warning "Wuffs' C++ code expects -std=c++11 or later"
diff --git a/internal/cgen/cgen.go b/internal/cgen/cgen.go
index af398b2..8097d2d 100644
--- a/internal/cgen/cgen.go
+++ b/internal/cgen/cgen.go
@@ -1235,7 +1235,7 @@
 	}
 	b.writes("#endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)\n\n")
 
-	b.writes("#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)\n")
+	b.writes("#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)\n")
 	b.writes("// Disallow constructing or copying an object via standard C++ mechanisms,\n")
 	b.writes("// e.g. the \"new\" operator, as this struct is intentionally opaque. Its total\n")
 	b.writes("// size and field layout is not part of the public, stable, memory-safe API.\n")
@@ -1250,7 +1250,9 @@
 	b.printf("%s() = delete;\n", fullStructName)
 	b.printf("%s(const %s&) = delete;\n", fullStructName, fullStructName)
 	b.printf("%s& operator=(\nconst %s&) = delete;\n", fullStructName, fullStructName)
-	b.writes("\n")
+	b.writes("#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)\n\n")
+
+	b.writes("#if !defined(WUFFS_IMPLEMENTATION)\n")
 	b.writes("// As above, the size of the struct is not part of the public API, and unless\n")
 	b.writes("// WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap\n")
 	b.writes("// allocated, not stack allocated. Its size is not intended to be known at\n")
@@ -1260,7 +1262,7 @@
 	b.writes("// different, so that passing the latter will be rejected by the initialize\n")
 	b.writes("// function, we add an arbitrary amount of dead weight.\n")
 	b.writes("uint8_t dead_weight[123000000];  // 123 MB.\n")
-	b.writes("#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)\n\n")
+	b.writes("#endif  // !defined(WUFFS_IMPLEMENTATION)\n\n")
 
 	b.writes("inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT\n" +
 		"initialize(\nsize_t sizeof_star_self,\nuint64_t wuffs_version,\nuint32_t options) {\n")
diff --git a/internal/cgen/data/data.go b/internal/cgen/data/data.go
index 92e4b94..49a5485 100644
--- a/internal/cgen/data/data.go
+++ b/internal/cgen/data/data.go
@@ -17,7 +17,7 @@
 package data
 
 const BaseAllImplC = "" +
-	"#ifndef WUFFS_INCLUDE_GUARD__BASE\n#define WUFFS_INCLUDE_GUARD__BASE\n\n#if defined(WUFFS_IMPLEMENTATION) && !defined(WUFFS_CONFIG__MODULES)\n#define WUFFS_CONFIG__MODULES\n#define WUFFS_CONFIG__MODULE__BASE\n#endif\n\n// !! WUFFS MONOLITHIC RELEASE DISCARDS EVERYTHING ABOVE.\n\n// !! INSERT base/copyright\n\n#include <stdbool.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n// Note that Clang also defines __GNUC__.\n#ifdef __cplusplus\n#if (__cplusplus >= 201103L) || defined(_MSC_VER)\n#include <memory>\n#define WUFFS_BASE__HAVE_UNIQUE_PTR\n#elif defined(__GNUC__)\n#warning \"Wuffs' C++ code expects -std=c++11 or later\"\n#endif\n\nextern \"C\" {\n#endif\n\n// !! INSERT base/all-public.h.\n\n// !! INSERT InterfaceDeclarations.\n\n" +
+	"#ifndef WUFFS_INCLUDE_GUARD__BASE\n#define WUFFS_INCLUDE_GUARD__BASE\n\n#if defined(WUFFS_IMPLEMENTATION) && !defined(WUFFS_CONFIG__MODULES)\n#define WUFFS_CONFIG__MODULES\n#define WUFFS_CONFIG__MODULE__BASE\n#endif\n\n// !! WUFFS MONOLITHIC RELEASE DISCARDS EVERYTHING ABOVE.\n\n// !! INSERT base/copyright\n\n#include <stdbool.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n// Note that Clang also defines __GNUC__.\n#ifdef __cplusplus\n#if (__cplusplus >= 201103L) || defined(_MSC_VER)\n#include <memory>\n#define WUFFS_BASE__HAVE_EQ_DELETE\n#define WUFFS_BASE__HAVE_UNIQUE_PTR\n#elif defined(__GNUC__)\n#warning \"Wuffs' C++ code expects -std=c++11 or later\"\n#endif\n\nextern \"C\" {\n#endif\n\n// !! INSERT base/all-public.h.\n\n// !! INSERT InterfaceDeclarations.\n\n" +
 	"" +
 	"// ----------------\n\n#ifdef __cplusplus\n}  // extern \"C\"\n#endif\n\n// WUFFS C HEADER ENDS HERE.\n#ifdef WUFFS_IMPLEMENTATION\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n// !! INSERT base/all-private.h.\n\n" +
 	"" +
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index f189ee3..1e60f58 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -39,6 +39,7 @@
 #ifdef __cplusplus
 #if (__cplusplus >= 201103L) || defined(_MSC_VER)
 #include <memory>
+#define WUFFS_BASE__HAVE_EQ_DELETE
 #define WUFFS_BASE__HAVE_UNIQUE_PTR
 #elif defined(__GNUC__)
 #warning "Wuffs' C++ code expects -std=c++11 or later"
@@ -5776,7 +5777,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -5792,7 +5793,9 @@
   wuffs_adler32__hasher__struct(const wuffs_adler32__hasher__struct&) = delete;
   wuffs_adler32__hasher__struct& operator=(
       const wuffs_adler32__hasher__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -5802,7 +5805,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -6058,7 +6061,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -6074,7 +6077,9 @@
   wuffs_bmp__decoder__struct(const wuffs_bmp__decoder__struct&) = delete;
   wuffs_bmp__decoder__struct& operator=(
       const wuffs_bmp__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -6084,7 +6089,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -6340,7 +6345,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -6356,7 +6361,9 @@
   wuffs_cbor__decoder__struct(const wuffs_cbor__decoder__struct&) = delete;
   wuffs_cbor__decoder__struct& operator=(
       const wuffs_cbor__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -6366,7 +6373,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -6526,7 +6533,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -6542,7 +6549,9 @@
   wuffs_crc32__ieee_hasher__struct(const wuffs_crc32__ieee_hasher__struct&) = delete;
   wuffs_crc32__ieee_hasher__struct& operator=(
       const wuffs_crc32__ieee_hasher__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -6552,7 +6561,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -6780,7 +6789,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -6796,7 +6805,9 @@
   wuffs_deflate__decoder__struct(const wuffs_deflate__decoder__struct&) = delete;
   wuffs_deflate__decoder__struct& operator=(
       const wuffs_deflate__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -6806,7 +6817,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -7008,7 +7019,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -7024,7 +7035,9 @@
   wuffs_lzw__decoder__struct(const wuffs_lzw__decoder__struct&) = delete;
   wuffs_lzw__decoder__struct& operator=(
       const wuffs_lzw__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -7034,7 +7047,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -7384,7 +7397,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -7400,7 +7413,9 @@
   wuffs_gif__decoder__struct(const wuffs_gif__decoder__struct&) = delete;
   wuffs_gif__decoder__struct& operator=(
       const wuffs_gif__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -7410,7 +7425,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -7652,7 +7667,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -7668,7 +7683,9 @@
   wuffs_gzip__decoder__struct(const wuffs_gzip__decoder__struct&) = delete;
   wuffs_gzip__decoder__struct& operator=(
       const wuffs_gzip__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -7678,7 +7695,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -7921,7 +7938,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -7937,7 +7954,9 @@
   wuffs_json__decoder__struct(const wuffs_json__decoder__struct&) = delete;
   wuffs_json__decoder__struct& operator=(
       const wuffs_json__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -7947,7 +7966,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -8179,7 +8198,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -8195,7 +8214,9 @@
   wuffs_nie__decoder__struct(const wuffs_nie__decoder__struct&) = delete;
   wuffs_nie__decoder__struct& operator=(
       const wuffs_nie__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -8205,7 +8226,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -8462,7 +8483,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -8478,7 +8499,9 @@
   wuffs_zlib__decoder__struct(const wuffs_zlib__decoder__struct&) = delete;
   wuffs_zlib__decoder__struct& operator=(
       const wuffs_zlib__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -8488,7 +8511,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -8794,7 +8817,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -8810,7 +8833,9 @@
   wuffs_png__decoder__struct(const wuffs_png__decoder__struct&) = delete;
   wuffs_png__decoder__struct& operator=(
       const wuffs_png__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -8820,7 +8845,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(
@@ -9115,7 +9140,7 @@
   }
 #endif  // defined(WUFFS_BASE__HAVE_UNIQUE_PTR)
 
-#if (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#if defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
   // Disallow constructing or copying an object via standard C++ mechanisms,
   // e.g. the "new" operator, as this struct is intentionally opaque. Its total
   // size and field layout is not part of the public, stable, memory-safe API.
@@ -9131,7 +9156,9 @@
   wuffs_wbmp__decoder__struct(const wuffs_wbmp__decoder__struct&) = delete;
   wuffs_wbmp__decoder__struct& operator=(
       const wuffs_wbmp__decoder__struct&) = delete;
+#endif  // defined(WUFFS_BASE__HAVE_EQ_DELETE) && !defined(WUFFS_IMPLEMENTATION)
 
+#if !defined(WUFFS_IMPLEMENTATION)
   // As above, the size of the struct is not part of the public API, and unless
   // WUFFS_IMPLEMENTATION is #define'd, this struct type T should be heap
   // allocated, not stack allocated. Its size is not intended to be known at
@@ -9141,7 +9168,7 @@
   // different, so that passing the latter will be rejected by the initialize
   // function, we add an arbitrary amount of dead weight.
   uint8_t dead_weight[123000000];  // 123 MB.
-#endif  // (__cplusplus >= 201103L) && !defined(WUFFS_IMPLEMENTATION)
+#endif  // !defined(WUFFS_IMPLEMENTATION)
 
   inline wuffs_base__status WUFFS_BASE__WARN_UNUSED_RESULT
   initialize(