mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-24 22:25:10 +00:00
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; | ^~~~~~~~~~~~ ```
This commit is contained in:
parent
e7be9c2c2e
commit
f07b28bda9
@ -43,6 +43,14 @@ class array; // Forward declaration
|
||||
|
||||
PYBIND11_NAMESPACE_BEGIN(detail)
|
||||
|
||||
#ifndef PYBIND11_CONSTINIT
|
||||
# if __cplusplus >= 202002L
|
||||
# define PYBIND11_CONSTINIT constinit
|
||||
# else
|
||||
# define PYBIND11_CONSTINIT
|
||||
# endif
|
||||
#endif
|
||||
|
||||
// Main author of this class: jbms@
|
||||
template <typename T>
|
||||
class LazyInitializeAtLeastOnceDestroyNever {
|
||||
@ -247,7 +255,7 @@ struct npy_api {
|
||||
};
|
||||
|
||||
static npy_api &get() {
|
||||
static LazyInitializeAtLeastOnceDestroyNever<npy_api> api_init;
|
||||
PYBIND11_CONSTINIT static LazyInitializeAtLeastOnceDestroyNever<npy_api> api_init;
|
||||
return api_init.Get(lookup);
|
||||
}
|
||||
|
||||
@ -685,7 +693,8 @@ public:
|
||||
|
||||
private:
|
||||
static object &_dtype_from_pep3118() {
|
||||
static detail::LazyInitializeAtLeastOnceDestroyNever<object> imported_obj;
|
||||
PYBIND11_CONSTINIT static detail::LazyInitializeAtLeastOnceDestroyNever<object>
|
||||
imported_obj;
|
||||
return imported_obj.Get([]() {
|
||||
return detail::import_numpy_core_submodule("_internal").attr("_dtype_from_pep3118");
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user