Add an explicit destructor function argument to registry::push_back() #170
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This patch adds an explicit 'destruct' function argument to
registry::push_back()
.Motivation:
See the 'opaque_ref' test in commit 834f0d1. This creates a wrapper for a C++ type where only the declaration is known. This may happen if you want to wrap functions/methods which take a const ref to a certain type as an argument, but instances of that type are produced elsewhere (perhaps a different Python module).
As it is now the 'opaque_ref' test fails because the associated Python module references
~Opaque()
- which is undefined. This is also counterintuitive, since Opaque is actually not constructed anywhere!The culprit is
rvalue_from_python_data<T>::~rvalue_from_python_data()
which unconditionally references the dtor of T. If we replace this dtor call with an explicit destructor function we only need a dtor reference if we're actually creating an instance.Source compatibility?:
Adding a parameter to
registry::push_back()
may break existing sources. It's not clear to me whether it's supposed to be a "stable" API or whether breakage is acceptable. If it's the former I'd look into creating a source-compatible variant.