better debug info when arg::operator=() fails
diff --git a/include/pybind11/attr.h b/include/pybind11/attr.h
index cfa5090..15d5982 100644
--- a/include/pybind11/attr.h
+++ b/include/pybind11/attr.h
@@ -229,11 +229,21 @@
         object o = object(detail::type_caster<typename detail::intrinsic_type<T>::type>::cast(
                 a.value, return_value_policy::automatic, handle()), false);
 
-        if (!o)
-            pybind11_fail("arg(): could not convert default keyword "
-                          "argument into a Python object (type not "
-                          "registered yet?)");
-
+        if (!o) {
+#if !defined(NDEBUG)
+            std::string descr(typeid(T).name());
+            detail::clean_type_id(descr);
+            if (r->class_)
+                descr += " in method of " + (std::string) r->class_.str();
+            pybind11_fail("arg(): could not convert default keyword argument "
+                          "of type " + descr +
+                          " into a Python object (type not registered yet?)");
+#else
+            pybind11_fail("arg(): could not convert default keyword argument "
+                          "into a Python object (type not registered yet?). "
+                          "Compile in debug mode for more information.");
+#endif
+        }
         r->args.emplace_back(a.name, a.descr, o.release());
     }
 };