* Add const T to docstring generation.
* Change order.
* See if existing test triggers for a const type.
* Add tests.
* Fix test.
* Remove experiment.
* Reformat.
* More tests, checks run.
* Adding `test_fmt_desc_` prefix to new test functions.
* Using pytest.mark.parametrize to 1. condense test; 2. exercise all functions even if one fails; 3. be less platform-specific (e.g. C++ float is not necessarily float32).
Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
* Drop constraints on casting of std::shared_ptr
std::shared_ptrs can be shared across python and C++ by design.
* Correctly report casting error
It is important to return an empty handle.
Simply returning None, would skip the error handling in
simple_collector / unpacking_collector, although a python exception is set.
A function call would then be processed with a (wrong) None argument!
* Return None for nullptr
* Revert "Drop constraints on casting of std::shared_ptr"
This reverts commit 7cf53ae8b4.
* Crash when printing Unicode to redirected cout
Add failing tests
* Fix Unicode crashes redirected cout
* pythonbuf::utf8_remainder check end iterator
* Remove trailing whitespace and formatting iostream
* Avoid buffer overflow if ostream redirect races
This doesn't solve the actual race, but at least it now has a much lower
probability of reading past the end of the buffer even when data races
do occur.
* Bug fix: adding back `!is_alias<Class>(ptr)` that were accidentally omitted.
* Introducing PYBIND11_SH_AVL, PYBIND11_SH_DEF macros. Applying PYBIND11_SH_DEF to test_factory_constructors.py to complete test coverage.
* Using PYBIND11_SH_DEF in test_methods_and_attributes.cpp, for more complete test coverage.
* Using PYBIND11_SH_DEF in test_multiple_inheritance.cpp, for more complete test coverage.
* Cleaning up test_classh_mock.cpp.
* Better explanations for PYBIND11_SH_AVL, PYBIND11_SH_DEF.
* Disabling 3.10-dev builds.
When the user defines _GLIBCXX_USE_CXX11_ABI=0 to force the pre-c++11 ABI, numpy.h assumes that is_trivially_copyable is available.
It is not necessarily the case. This patch uses clang's feature detection instead.
The workaround is for certain libstdc++ versions, so the test should target these particular versions.
* Using new smart_holder::reclaim_disowned in smart_holder_type_caster for unique_ptr.
* Systematically renaming was_disowned to is_disowned (because disowning is now reversible: reclaim_disowned).
* Systematically renaming virtual_overrider_self_life_support to trampoline_self_life_support (to reuse existing terminology instead of introducing new one).
* Systematically renaming test_class_sh_with_alias to test_class_sh_trampoline_basic.
* Adding a Trampolines and std::unique_ptr section to README_smart_holder.rst.
* MSVC compatibility.
* Porting subset of absltest code from reproducer provided by @elkhrt. Baseline for debugging ASAN heap-use-after-free.
* Moving Py_DECREF to resolve ASAN heap-use-after-free failure.
* Fixing trivial formatting issue.
* Workaround for clang 3.6 and 3.7.
* Adding PyGILState_Check() in object_api<>::operator().
* Enabling PyGILState_Check() for Python >= 3.6 only.
Possibly, this explains why PyGILState_Check() cannot safely be used with Python 3.4 and 3.5:
https://github.com/python/cpython/pull/10267#issuecomment-434881587
* Adding simple micro benchmark.
* Reducing test time to minimum (purely for coverage, not for accurate results).
* Fixing silly oversight.
* Minor code organization improvement in test.
* Adding example runtimes.
* Removing capsys (just run with `-k test_callback_num_times -s` and using `.format()`.
* Adaption of PyCLIF virtual_py_cpp_mix test.
* Removing ValueError: Ownership of instance with virtual overrides in Python cannot be transferred to C++. TODO: static_assert alias class needs to inherit from virtual_overrider_self_life_support.
* Bringing back ValueError: "... instance cannot safely be transferred to C++.", but based on dynamic_cast<AliasType>.
* Fixing oversight: adding test_class_sh_virtual_py_cpp_mix.cpp to cmake file.
* clang <= 3.6 compatibility.
* Fixing oversight: dynamic_raw_ptr_cast_if_possible needs special handling for To = void. Adding corresponding missing test in test_class_sh_virtual_py_cpp_mix. Moving dynamic_raw_ptr_cast_if_possible to separate header.
* Changing py::detail::virtual_overrider_self_life_support to py::virtual_overrider_self_life_support.
* Initial version of virtual_overrider_self_life_support (enables safely passing unique_ptr to C++).
* Clang 3.6, 3.7 compatibility.
* Adding missing default constructor.
* Restoring test for exception for the case that virtual_overrider_self_life_support is not used.
* Fixing oversight: Adding missing holder().ensure_was_not_disowned().
* Adding unit tests for new `struct smart_holder` member functions.
* Moving virtual_overrider_self_life_support to separate include file, with iwyu cleanup.