Index: tests/Makefile.am
===================================================================
--- tests/Makefile.am	(revision ec2222049a9fca3d80799f50564f03f551e6255d)
+++ tests/Makefile.am	(revision 64f3b9fefe9bf3caf101090443066ca16169610e)
@@ -272,4 +272,8 @@
 	-cp ${test} ${abspath ${@}}
 
+raii/partial-ERR1 : raii/partial.cfa ${CFACCBIN}
+	${CFACOMPILE_SYNTAX} -DERR1
+	-cp ${test} ${abspath ${@}}
+
 # Exception Tests
 # Test with libcfathread; it changes how storage works.
Index: tests/raii/.expect/partial-ERR1.txt
===================================================================
--- tests/raii/.expect/partial-ERR1.txt	(revision 64f3b9fefe9bf3caf101090443066ca16169610e)
+++ tests/raii/.expect/partial-ERR1.txt	(revision 64f3b9fefe9bf3caf101090443066ca16169610e)
@@ -0,0 +1,155 @@
+raii/partial.cfa:33:1 error: Unique best alternative includes deleted identifier in Generated Cast of:
+  Application of
+    Deleted Expression
+      Variable Expression: ?{}: static inline function
+      ... with parameters
+        reference to instance of struct thing3 with body
+      ... returning nothing
+
+      ... with resolved type:
+        function
+        ... with parameters
+          reference to instance of struct thing3 with body
+        ... returning nothing
+
+      ... deleted by: ?{}: function
+      ... with parameters
+        reference to instance of struct thing3 with body
+        instance of struct thing3 with body
+      ... returning nothing
+
+    ... to arguments
+    Generated Cast of:
+      Variable Expression: x: instance of struct thing3 with body
+      ... with resolved type:
+        instance of struct thing3 with body
+    ... to:
+      reference to instance of struct thing3 with body
+    ... with resolved type:
+      reference to instance of struct thing3 with body
+
+  ... with resolved type:
+    void
+... to: nothing
+... with resolved type:
+  void
+raii/partial.cfa:50:1 error: Unique best alternative includes deleted identifier in Generated Cast of:
+  Application of
+    Deleted Expression
+      Variable Expression: ?{}: function
+      ... with parameters
+        reference to instance of struct thing456 with body
+        instance of struct thing456 with body
+      ... returning nothing
+
+      ... with resolved type:
+        function
+        ... with parameters
+          reference to instance of struct thing456 with body
+          instance of struct thing456 with body
+        ... returning nothing
+
+      ... deleted by: ?{}: function
+      ... with parameters
+        reference to instance of struct thing456 with body
+        instance of struct thing456 with body
+      ... returning nothing
+
+    ... to arguments
+    Generated Cast of:
+      Variable Expression: y: instance of struct thing456 with body
+      ... with resolved type:
+        instance of struct thing456 with body
+    ... to:
+      reference to instance of struct thing456 with body
+    ... with resolved type:
+      reference to instance of struct thing456 with body
+    Variable Expression: x: instance of struct thing456 with body
+    ... with resolved type:
+      instance of struct thing456 with body
+
+  ... with resolved type:
+    void
+... to: nothing
+... with resolved type:
+  void
+raii/partial.cfa:58:1 error: Unique best alternative includes deleted identifier in Generated Cast of:
+  Application of
+    Deleted Expression
+      Variable Expression: ?{}: static inline function
+      ... with parameters
+        reference to instance of struct wrapper1 with body
+        instance of struct wrapper1 with body
+      ... returning nothing
+
+      ... with resolved type:
+        function
+        ... with parameters
+          reference to instance of struct wrapper1 with body
+          instance of struct wrapper1 with body
+        ... returning nothing
+
+      ... deleted by: ?{}: autogenerated cfa static inline function
+      ... with parameters
+        reference to instance of struct wrapper1 with body
+        instance of struct wrapper1 with body
+      ... returning nothing
+
+    ... to arguments
+    Generated Cast of:
+      Variable Expression: y: instance of struct wrapper1 with body
+      ... with resolved type:
+        instance of struct wrapper1 with body
+    ... to:
+      reference to instance of struct wrapper1 with body
+    ... with resolved type:
+      reference to instance of struct wrapper1 with body
+    Variable Expression: x: instance of struct wrapper1 with body
+    ... with resolved type:
+      instance of struct wrapper1 with body
+
+  ... with resolved type:
+    void
+... to: nothing
+... with resolved type:
+  void
+raii/partial.cfa:65:1 error: Unique best alternative includes deleted identifier in Generated Cast of:
+  Application of
+    Deleted Expression
+      Variable Expression: ?{}: static inline function
+      ... with parameters
+        reference to instance of struct wrapper2 with body
+        instance of struct wrapper2 with body
+      ... returning nothing
+
+      ... with resolved type:
+        function
+        ... with parameters
+          reference to instance of struct wrapper2 with body
+          instance of struct wrapper2 with body
+        ... returning nothing
+
+      ... deleted by: ?{}: autogenerated cfa static inline function
+      ... with parameters
+        reference to instance of struct wrapper2 with body
+        instance of struct wrapper2 with body
+      ... returning nothing
+
+    ... to arguments
+    Generated Cast of:
+      Variable Expression: y: instance of struct wrapper2 with body
+      ... with resolved type:
+        instance of struct wrapper2 with body
+    ... to:
+      reference to instance of struct wrapper2 with body
+    ... with resolved type:
+      reference to instance of struct wrapper2 with body
+    Variable Expression: x: instance of struct wrapper2 with body
+    ... with resolved type:
+      instance of struct wrapper2 with body
+
+  ... with resolved type:
+    void
+... to: nothing
+... with resolved type:
+  void
Index: tests/raii/.expect/partial.txt
===================================================================
--- tests/raii/.expect/partial.txt	(revision 64f3b9fefe9bf3caf101090443066ca16169610e)
+++ tests/raii/.expect/partial.txt	(revision 64f3b9fefe9bf3caf101090443066ca16169610e)
@@ -0,0 +1,16 @@
+test1
+custom ctor
+test2
+custom ctor
+custom dtor
+custom dtor
+test3
+test4
+custom ctor
+custom dtor
+test5
+custom ctor
+custom dtor
+test6
+custom ctor
+custom dtor
Index: tests/raii/partial.cfa
===================================================================
--- tests/raii/partial.cfa	(revision 64f3b9fefe9bf3caf101090443066ca16169610e)
+++ tests/raii/partial.cfa	(revision 64f3b9fefe9bf3caf101090443066ca16169610e)
@@ -0,0 +1,75 @@
+// Partial autogen means that some lifecycle functions are possible to generate, and needed, while
+// others are impossible to generate, but unneeded.
+
+#ifdef ERR1
+#define BAD(...) __VA_ARGS__
+#else
+#define BAD(...)
+#endif
+
+// Declaring your own empty ctor leaves an autogen dtor usable
+struct thing1 {};
+void ?{}( thing1 & this ) {  printf( "custom ctor\n"); }
+void test1() {
+    printf("test1\n");
+    thing1 x;
+}
+
+// Declaring your own empty ctor and dtor leaves an autogen copy ctor usable
+struct thing2 {};
+void  ?{}( thing2 & this ) {  printf( "custom ctor\n"); }
+void ^?{}( thing2 & this ) {  printf( "custom dtor\n"); }
+void test2() {
+    printf("test2\n");
+    thing2 x;
+    thing2 y = x;
+}
+
+// Deleting the autogen copy ctor also deletes the autogen empty ctor
+struct thing3 {};
+void  ?{}( thing3 &, thing3 ) = void;
+void test3() {
+    printf("test3\n");
+    BAD( thing3 x; )  // Unique best alternative includes deleted identifier
+}
+
+struct thing456 {};
+void    ?{}( thing456 & this ) {  printf( "custom ctor\n"); }
+void    ?{}( thing456 &, thing456 ) = void;
+thing456 & ?=?( thing456 &, thing456 ) = void;
+void   ^?{}( thing456 & this ) {  printf( "custom dtor\n"); }
+
+struct wrapper1 { thing456 x; };
+struct wrapper2 { wrapper1 x; };
+
+// Deleting some autogens and declaring your own for the others leaves yours usable
+// and the deleted ones cleanly deleted
+void test4() {
+    printf("test4\n");
+    thing456 x;
+    BAD(  thing456 y = x;  )   // Unique best alternative includes deleted identifier
+}
+
+// Wrapping v4 leaves yours usable via autogen
+// and the autogen-lifts of your deleted ones are not usable
+void test5() {
+    printf("test5\n");
+    wrapper1 x;
+    BAD(  wrapper1 y = x;  )  //  Unique best alternative includes deleted identifier
+}
+
+// Wrapping again works similarly
+void test6() {
+    printf("test6\n");
+    wrapper2 x;
+    BAD(  wrapper2 y = x;  )  //  Unique best alternative includes deleted identifier
+}
+
+int main() {
+    test1();
+    test2();
+    test3();
+    test4();
+    test5();
+    test6();
+}
