Fix issue with indirect return for C++ member function w/no args

diff --git a/gen/src/write.rs b/gen/src/write.rs
index c06fce9..2cf9faf 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -424,7 +424,7 @@
     }
     let indirect_return = indirect_return(efn, types);
     if indirect_return {
-        if !efn.args.is_empty() {
+        if !efn.args.is_empty() || efn.receiver.is_some() {
             write!(out, ", ");
         }
         write_indirect_return_type_space(out, efn.ret.as_ref().unwrap());
diff --git a/src/exception.rs b/src/exception.rs
index 125e484..e16916a 100644
--- a/src/exception.rs
+++ b/src/exception.rs
@@ -1,7 +1,7 @@
 use std::fmt::{self, Debug, Display};
 
 /// Exception thrown from an `extern "C"` function.
-#[derive(Debug)]
+#[derive(Debug, PartialEq)]
 pub struct Exception {
     pub(crate) what: Box<str>,
 }
diff --git a/tests/ffi/lib.rs b/tests/ffi/lib.rs
index d4e96fc..51716e0 100644
--- a/tests/ffi/lib.rs
+++ b/tests/ffi/lib.rs
@@ -83,6 +83,8 @@
         fn set(self: &mut C, n: usize) -> usize;
         fn get2(&self) -> usize;
         fn set2(&mut self, n: usize) -> usize;
+        fn set_succeed(&mut self, n: usize) -> Result<usize>;
+        fn get_fail(&mut self) -> Result<usize>;
     }
 
     extern "C" {
diff --git a/tests/ffi/tests.cc b/tests/ffi/tests.cc
index af7a4a0..677a55d 100644
--- a/tests/ffi/tests.cc
+++ b/tests/ffi/tests.cc
@@ -28,6 +28,10 @@
   return this->n;
 }
 
+size_t C::set_succeed(size_t n) { return this->set2(n); }
+
+size_t C::get_fail() { throw std::runtime_error("unimplemented"); }
+
 const std::vector<uint8_t> &C::get_v() const { return this->v; }
 
 size_t c_return_primitive() { return 2020; }
diff --git a/tests/ffi/tests.h b/tests/ffi/tests.h
index 1173a0a..c1a08d2 100644
--- a/tests/ffi/tests.h
+++ b/tests/ffi/tests.h
@@ -16,6 +16,8 @@
   size_t set(size_t n);
   size_t get2() const;
   size_t set2(size_t n);
+  size_t set_succeed(size_t n);
+  size_t get_fail();
   const std::vector<uint8_t> &get_v() const;
 
 private:
diff --git a/tests/test.rs b/tests/test.rs
index 91bd25e..836e2d3 100644
--- a/tests/test.rs
+++ b/tests/test.rs
@@ -157,7 +157,9 @@
     assert_eq!(2021, unique_ptr.set(2021));
     assert_eq!(2021, unique_ptr.get());
     assert_eq!(old_value, unique_ptr.set2(old_value));
-    assert_eq!(old_value, unique_ptr.get2())
+    assert_eq!(old_value, unique_ptr.get2());
+    assert_eq!(Ok(2022), unique_ptr.set_succeed(2022));
+    assert!(unique_ptr.get_fail().is_err());
 }
 
 #[test]