* LazyInitializeAtLeastOnceDestroyNever v1
* Go back to using `union` as originally suggested by jbms@. The trick (also suggested by jbms@) is to add empty ctor + dtor.
* Revert "Go back to using `union` as originally suggested by jbms@. The trick (also suggested by jbms@) is to add empty ctor + dtor."
This reverts commit e7b8c4f0fcd72191e88d1c17abf5da08fe3a9c6f.
* Remove `#include <stdalign.h>`
* `include\pybind11/numpy.h(24,10): fatal error C1083: Cannot open include file: 'stdalign.h': No such file or directory`
* @tkoeppe wrote: this is a C interop header (and we're not writing C)
* Suppress gcc 4.8.5 (CentOS 7) warning.
```
include/pybind11/eigen/../numpy.h:63:53: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
return *reinterpret_cast<T *>(value_storage_);
^
```
* Replace comments:
Document PRECONDITION.
Adopt comment suggested by @tkoeppe: https://github.com/pybind/pybind11/pull/4877#discussion_r1350356093
* Adopt suggestion by @tkoeppe:
* https://github.com/pybind/pybind11/pull/4877#issuecomment-1752969127
* https://godbolt.org/z/Wa79nKz6e
* Add `PYBIND11_CONSTINIT`, but it does not work for the current use cases:
```
g++ -o pybind11/tests/test_numpy_array.os -c -std=c++20 -fPIC -fvisibility=hidden -O0 -g -Wall -Wextra -Wconversion -Wcast-qual -Wdeprecated -Wundef -Wnon-virtual-dtor -Wunused-result -Werror -isystem /usr/include/python3.11 -isystem /usr/include/eigen3 -DPYBIND11_STRICT_ASSERTS_CLASS_HOLDER_VS_TYPE_CASTER_MIX -DPYBIND11_ENABLE_TYPE_CASTER_ODR_GUARD_IF_AVAILABLE -DPYBIND11_TEST_BOOST -Ipybind11/include -I/usr/local/google/home/rwgk/forked/pybind11/include -I/usr/local/google/home/rwgk/clone/pybind11/include /usr/local/google/home/rwgk/forked/pybind11/tests/test_numpy_array.cpp
```
```
In file included from /usr/local/google/home/rwgk/forked/pybind11/tests/test_numpy_array.cpp:10:
/usr/local/google/home/rwgk/forked/pybind11/include/pybind11/numpy.h: In static member function ‘static pybind11::detail::npy_api& pybind11::detail::npy_api::get()’:
/usr/local/google/home/rwgk/forked/pybind11/include/pybind11/numpy.h:258:82: error: ‘constinit’ variable ‘api_init’ does not have a constant initializer
258 | PYBIND11_CONSTINIT static LazyInitializeAtLeastOnceDestroyNever<npy_api> api_init;
| ^~~~~~~~
```
```
In file included from /usr/local/google/home/rwgk/forked/pybind11/tests/test_numpy_array.cpp:10:
/usr/local/google/home/rwgk/forked/pybind11/include/pybind11/numpy.h: In static member function ‘static pybind11::object& pybind11::dtype::_dtype_from_pep3118()’:
/usr/local/google/home/rwgk/forked/pybind11/include/pybind11/numpy.h:697:13: error: ‘constinit’ variable ‘imported_obj’ does not have a constant initializer
697 | imported_obj;
| ^~~~~~~~~~~~
```
* Revert "Add `PYBIND11_CONSTINIT`, but it does not work for the current use cases:"
This reverts commit f07b28bda9f91fb723aa898a21c81b6dd6857072.
* Reapply "Add `PYBIND11_CONSTINIT`, but it does not work for the current use cases:"
This reverts commit 36be645758aa82b576d24003808386bec6e55bf9.
* Add Default Member Initializer on `value_storage_` as suggested by @tkoeppe:
https://github.com/pybind/pybind11/pull/4877#issuecomment-1753201342
This fixes the errors reported under commit f07b28bda9f91fb723aa898a21c81b6dd6857072.
* Fix copy-paste-missed-a-change mishap in commit 88cec1152ab5576db19bab95c484672f06f5989a.
* Semi-paranoid placement new (based on https://github.com/pybind/pybind11/pull/4877#discussion_r1350573114).
* Move PYBIND11_CONSTINIT to detail/common.h
* Move code to the right places, rename new class and some variables.
* Fix oversight: update tests/extra_python_package/test_files.py
* Get the name right first.
* Use `std::call_once`, `std::atomic`, following a pattern developed by @tkoeppe
* Make the API more self-documenting (and possibly more easily reusable).
* google-clang-tidy IWYU fixes
* Rewrite comment as suggested by @tkoeppe
* Update test_exceptions.cpp and exceptions.rst
* Fix oversight in previous commit: add `PYBIND11_CONSTINIT`
* Make `get_stored()` non-const for simplicity.
As suggested by @tkoeppe: not seeing any reasonable use in which `get_stored` has to be const.
* Add comment regarding `KeyboardInterrupt` behavior, based heavily on information provided by @jbms.
* Add `assert(PyGILState_Check())` in `gil_scoped_release` ctor (simple & non-simple implementation) as suggested by @EthanSteinberg.
* Fix oversight in previous commit (missing include cassert).
* Remove use of std::atomic, leaving comments with rationale, why it is not needed.
* Rewrite comment re `std:optional` based on deeper reflection (aka 2nd thoughts).
* Additional comment with the conclusion of a discussion under PR #4877.
* https://github.com/pybind/pybind11/pull/4877#issuecomment-1757363179
* Small comment changes suggested by @tkoeppe.
| Name |
Last commit
|
Last Update |
|---|---|---|
| .. | ||
| extra_python_package | Loading commit data... | |
| extra_setuptools | Loading commit data... | |
| test_cmake_build | Loading commit data... | |
| test_embed | Loading commit data... | |
| CMakeLists.txt | Loading commit data... | |
| conftest.py | Loading commit data... | |
| constructor_stats.h | Loading commit data... | |
| cross_module_gil_utils.cpp | Loading commit data... | |
| cross_module_interleaved_error_already_set.cpp | Loading commit data... | |
| eigen_tensor_avoid_stl_array.cpp | Loading commit data... | |
| env.py | Loading commit data... | |
| local_bindings.h | Loading commit data... | |
| object.h | Loading commit data... | |
| pybind11_cross_module_tests.cpp | Loading commit data... | |
| pybind11_tests.cpp | Loading commit data... | |
| pybind11_tests.h | Loading commit data... | |
| pytest.ini | Loading commit data... | |
| requirements.txt | Loading commit data... | |
| test_async.cpp | Loading commit data... | |
| test_async.py | Loading commit data... | |
| test_buffers.cpp | Loading commit data... | |
| test_buffers.py | Loading commit data... | |
| test_builtin_casters.cpp | Loading commit data... | |
| test_builtin_casters.py | Loading commit data... | |
| test_call_policies.cpp | Loading commit data... | |
| test_call_policies.py | Loading commit data... | |
| test_callbacks.cpp | Loading commit data... | |
| test_callbacks.py | Loading commit data... | |
| test_chrono.cpp | Loading commit data... | |
| test_chrono.py | Loading commit data... | |
| test_class.cpp | Loading commit data... | |
| test_class.py | Loading commit data... | |
| test_const_name.cpp | Loading commit data... | |
| test_const_name.py | Loading commit data... | |
| test_constants_and_functions.cpp | Loading commit data... | |
| test_constants_and_functions.py | Loading commit data... | |
| test_copy_move.cpp | Loading commit data... | |
| test_copy_move.py | Loading commit data... | |
| test_custom_type_casters.cpp | Loading commit data... | |
| test_custom_type_casters.py | Loading commit data... | |
| test_custom_type_setup.cpp | Loading commit data... | |
| test_custom_type_setup.py | Loading commit data... | |
| test_docstring_options.cpp | Loading commit data... | |
| test_docstring_options.py | Loading commit data... | |
| test_eigen_matrix.cpp | Loading commit data... | |
| test_eigen_matrix.py | Loading commit data... | |
| test_eigen_tensor.cpp | Loading commit data... | |
| test_eigen_tensor.inl | Loading commit data... | |
| test_eigen_tensor.py | Loading commit data... | |
| test_enum.cpp | Loading commit data... | |
| test_enum.py | Loading commit data... | |
| test_eval.cpp | Loading commit data... | |
| test_eval.py | Loading commit data... | |
| test_eval_call.py | Loading commit data... | |
| test_exceptions.cpp | Loading commit data... | |
| test_exceptions.h | Loading commit data... | |
| test_exceptions.py | Loading commit data... | |
| test_factory_constructors.cpp | Loading commit data... | |
| test_factory_constructors.py | Loading commit data... | |
| test_gil_scoped.cpp | Loading commit data... | |
| test_gil_scoped.py | Loading commit data... | |
| test_iostream.cpp | Loading commit data... | |
| test_iostream.py | Loading commit data... | |
| test_kwargs_and_defaults.cpp | Loading commit data... | |
| test_kwargs_and_defaults.py | Loading commit data... | |
| test_local_bindings.cpp | Loading commit data... | |
| test_local_bindings.py | Loading commit data... | |
| test_methods_and_attributes.cpp | Loading commit data... | |
| test_methods_and_attributes.py | Loading commit data... | |
| test_modules.cpp | Loading commit data... | |
| test_modules.py | Loading commit data... | |
| test_multiple_inheritance.cpp | Loading commit data... | |
| test_multiple_inheritance.py | Loading commit data... | |
| test_numpy_array.cpp | Loading commit data... | |
| test_numpy_array.py | Loading commit data... | |
| test_numpy_dtypes.cpp | Loading commit data... | |
| test_numpy_dtypes.py | Loading commit data... | |
| test_numpy_vectorize.cpp | Loading commit data... | |
| test_numpy_vectorize.py | Loading commit data... | |
| test_opaque_types.cpp | Loading commit data... | |
| test_opaque_types.py | Loading commit data... | |
| test_operator_overloading.cpp | Loading commit data... | |
| test_operator_overloading.py | Loading commit data... | |
| test_pickling.cpp | Loading commit data... | |
| test_pickling.py | Loading commit data... | |
| test_pytypes.cpp | Loading commit data... | |
| test_pytypes.py | Loading commit data... | |
| test_sequences_and_iterators.cpp | Loading commit data... | |
| test_sequences_and_iterators.py | Loading commit data... | |
| test_smart_ptr.cpp | Loading commit data... | |
| test_smart_ptr.py | Loading commit data... | |
| test_stl.cpp | Loading commit data... | |
| test_stl.py | Loading commit data... | |
| test_stl_binders.cpp | Loading commit data... | |
| test_stl_binders.py | Loading commit data... | |
| test_tagbased_polymorphic.cpp | Loading commit data... | |
| test_tagbased_polymorphic.py | Loading commit data... | |
| test_thread.cpp | Loading commit data... | |
| test_thread.py | Loading commit data... | |
| test_type_caster_pyobject_ptr.cpp | Loading commit data... | |
| test_type_caster_pyobject_ptr.py | Loading commit data... | |
| test_union.cpp | Loading commit data... | |
| test_union.py | Loading commit data... | |
| test_unnamed_namespace_a.cpp | Loading commit data... | |
| test_unnamed_namespace_a.py | Loading commit data... | |
| test_unnamed_namespace_b.cpp | Loading commit data... | |
| test_unnamed_namespace_b.py | Loading commit data... | |
| test_vector_unique_ptr_member.cpp | Loading commit data... | |
| test_vector_unique_ptr_member.py | Loading commit data... | |
| test_virtual_functions.cpp | Loading commit data... | |
| test_virtual_functions.py | Loading commit data... | |
| valgrind-numpy-scipy.supp | Loading commit data... | |
| valgrind-python.supp | Loading commit data... |