improve debug error message when default parameter construction fails

This commit is contained in:
Wenzel Jakob 2016-04-01 12:17:03 +02:00
parent 9e75905b69
commit 912feec119
1 changed files with 10 additions and 4 deletions

View File

@ -233,11 +233,17 @@ struct process_attribute<arg_t<T>> : process_attribute_default<arg_t<T>> {
#if !defined(NDEBUG) #if !defined(NDEBUG)
std::string descr(typeid(T).name()); std::string descr(typeid(T).name());
detail::clean_type_id(descr); detail::clean_type_id(descr);
if (r->class_) descr = "'" + std::string(a.name) + ": " + descr + "'";
descr += " in method of " + (std::string) r->class_.str(); if (r->class_) {
if (r->name)
descr += " in method '" + (std::string) r->class_.str() + "." + (std::string) r->name + "'";
else
descr += " in method of '" + (std::string) r->class_.str() + "'";
} else if (r->name) {
descr += " in function named '" + (std::string) r->name + "'";
}
pybind11_fail("arg(): could not convert default keyword argument " pybind11_fail("arg(): could not convert default keyword argument "
"of type " + descr + + descr + " into a Python object (type not registered yet?)");
" into a Python object (type not registered yet?)");
#else #else
pybind11_fail("arg(): could not convert default keyword argument " pybind11_fail("arg(): could not convert default keyword argument "
"into a Python object (type not registered yet?). " "into a Python object (type not registered yet?). "