type_caster<std::optional>: support non-assignable types #358
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.
So far, type_caster<std::optional>::from_python requires T to support copy-assignment, because it uses std::optional::operator=, which in turn uses
Removed this requirement by replacing std::optional::operator= with std::optional::emplace, which always uses in-place construction.
Apart from supporting non-assignable types, there should be no changes in behaviour, because type_caster<std::optional>::from_python is called only once on each instance, and so its member
value
is always empty, anyway.My use case: bind functions with arguments of type std::optional<Eigen::Map>. Compilation fails without this change.