pybind11/tests
Jason Rhinelander 23bf894590 Override deduced Base class when defining Derived methods
When defining method from a member function pointer (e.g. `.def("f",
&Derived::f)`) we run into a problem if `&Derived::f` is actually
implemented in some base class `Base` when `Base` isn't
pybind-registered.

This happens because the class type is deduced from the member function
pointer, which then becomes a lambda with first argument this deduced
type.  For a base class implementation, the deduced type is `Base`, not
`Derived`, and so we generate and registered an overload which takes a
`Base *` as first argument.  Trying to call this fails if `Base` isn't
registered (e.g.  because it's an implementation detail class that isn't
intended to be exposed to Python) because the type caster for an
unregistered type always fails.

This commit adds a `method_adaptor` function that rebinds a member
function to a derived type member function and otherwise (i.e. regular
functions/lambda) leaves the argument as-is.  This is now used for class
definitions so that they are bound with type being registered rather
than a potential base type.

A closely related fix in this commit is to similarly update the lambdas
used for `def_readwrite` (and related) to bind to the class type being
registered rather than the deduced type so that registering a property
that resolves to a base class member similarly generates a usable
function.

Fixes #854, #910.

Co-Authored-By: Dean Moldovan <dean0x7d@gmail.com>
2017-07-03 17:28:45 -04:00
..
test_cmake_build Move test_cmake_build target code into its subdirectory 2017-06-27 10:38:41 +02:00
test_embed Fix embedded threads test on MSVC2015 / Python 2.7 2017-06-24 21:59:55 +02:00
CMakeLists.txt Move test_cmake_build target code into its subdirectory 2017-06-27 10:38:41 +02:00
conftest.py Minor pytest maintenance (#702) 2017-03-10 15:42:42 +01:00
constructor_stats.h Support multiple inheritance from python 2017-06-12 09:56:55 -03:00
object.h Improve custom holder support (#607) 2017-01-31 17:05:44 +01:00
pybind11_tests.cpp Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
pybind11_tests.h Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
pytest.ini Don't let pytest discover tests from test_cmake_build and test_embed 2017-06-10 16:44:21 +02:00
test_buffers.cpp Convenience constructor templates for buffer_info (#860) 2017-05-29 03:13:55 +02:00
test_buffers.py Fix buffer protocol inheritance 2017-05-29 02:03:58 +02:00
test_builtin_casters.cpp Fix unsigned error value casting 2017-07-02 15:27:51 -04:00
test_builtin_casters.py Fix unsigned error value casting 2017-07-02 15:27:51 -04:00
test_call_policies.cpp Hold strong references to keep_alive patients 2017-06-24 12:59:46 -04:00
test_call_policies.py Hold strong references to keep_alive patients 2017-06-24 12:59:46 -04:00
test_callbacks.cpp Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_callbacks.py functional: support bound methods 2017-04-29 10:43:17 -04:00
test_chrono.cpp Fix for floating point durations 2017-03-11 23:04:16 -04:00
test_chrono.py Fix for floating point durations 2017-03-11 23:04:16 -04:00
test_class.cpp Add a life support system for type_caster temporaries 2017-06-29 11:31:54 +02:00
test_class.py Add a life support system for type_caster temporaries 2017-06-29 11:31:54 +02:00
test_constants_and_functions.cpp Support binding noexcept function/methods in C++17 2016-12-14 20:40:49 +01:00
test_constants_and_functions.py Support binding noexcept function/methods in C++17 2016-12-14 20:40:49 +01:00
test_copy_move.cpp Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_copy_move.py Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_docstring_options.cpp Fix extra docstring newlines under options.disable_function_signatures() 2017-03-08 12:32:42 -05:00
test_docstring_options.py Fix extra docstring newlines under options.disable_function_signatures() 2017-03-08 12:32:42 -05:00
test_eigen.cpp Fix indirect loading of Eigen::Ref 2017-06-29 11:31:54 +02:00
test_eigen.py Fix indirect loading of Eigen::Ref 2017-06-29 11:31:54 +02:00
test_enum.cpp enum_: fix implicit conversion on Python 2.7 2017-04-29 16:35:28 +02:00
test_enum.py pytest target: add USE_TERMINAL flag 2017-04-29 16:35:28 +02:00
test_eval_call.py Add checks to maintain a consistent Python code style and prevent bugs (#515) 2016-11-20 21:21:54 +01:00
test_eval.cpp Add py::exec() as a shortcut for py::eval<py::eval_statements>() 2017-05-08 20:46:16 +02:00
test_eval.py Rewrite eval tests to allow for simple asserts 2016-08-19 16:31:48 +02:00
test_exceptions.cpp Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_exceptions.py Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_kwargs_and_defaults.cpp Add support for positional args with args/kwargs 2017-01-31 17:24:41 +01:00
test_kwargs_and_defaults.py Minor pytest maintenance (#702) 2017-03-10 15:42:42 +01:00
test_methods_and_attributes.cpp Override deduced Base class when defining Derived methods 2017-07-03 17:28:45 -04:00
test_methods_and_attributes.py Override deduced Base class when defining Derived methods 2017-07-03 17:28:45 -04:00
test_modules.cpp Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_modules.py Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_multiple_inheritance.cpp Support multiple inheritance from python 2017-06-12 09:56:55 -03:00
test_multiple_inheritance.py Support multiple inheritance from python 2017-06-12 09:56:55 -03:00
test_numpy_array.cpp Now shape, size, ndims and itemsize are also signed integers. 2017-05-08 01:50:21 +02:00
test_numpy_array.py Now shape, size, ndims and itemsize are also signed integers. 2017-05-08 01:50:21 +02:00
test_numpy_dtypes.cpp Allow std::complex field with PYBIND11_NUMPY_DTYPE (#831) 2017-05-10 11:36:24 +02:00
test_numpy_dtypes.py Allow std::complex field with PYBIND11_NUMPY_DTYPE (#831) 2017-05-10 11:36:24 +02:00
test_numpy_vectorize.cpp vectorize: pass-through of non-vectorizable args 2017-05-24 20:43:41 -04:00
test_numpy_vectorize.py vectorize: pass-through of non-vectorizable args 2017-05-24 20:43:41 -04:00
test_opaque_types.cpp Make test initialization self-registering 2016-09-03 17:34:41 -04:00
test_opaque_types.py Prefer non-converting argument overloads 2017-02-03 20:47:17 -05:00
test_operator_overloading.cpp Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_operator_overloading.py Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_pickling.cpp fix segfault in test suite due to typo (fixes #586) 2017-01-04 15:05:20 +01:00
test_pickling.py WIP: PyPy support (#527) 2016-12-16 15:00:46 +01:00
test_pytypes.cpp Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_pytypes.py Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_sequences_and_iterators.cpp Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_sequences_and_iterators.py Split test_python_types.cpp into builtin_casters, stl and pytypes 2017-06-27 10:38:41 +02:00
test_smart_ptr.cpp Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_smart_ptr.py Move tests from test_issues.cpp/py into appropriate files 2017-06-27 10:38:41 +02:00
test_stl_binders.cpp Add the buffer interface for wrapped STL vectors 2017-03-14 02:50:04 +01:00
test_stl_binders.py Fix invalid memory access in vector insert method 2017-05-25 10:51:28 -04:00
test_stl.cpp Add tests for passing STL containers by pointer 2017-06-27 10:38:41 +02:00
test_stl.py Add tests for passing STL containers by pointer 2017-06-27 10:38:41 +02:00
test_virtual_functions.cpp Move tests from short translation units into their logical parents 2017-06-27 10:38:41 +02:00
test_virtual_functions.py Move tests from short translation units into their logical parents 2017-06-27 10:38:41 +02:00