mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 08:03:55 +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)
|
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@
|
// Main author of this class: jbms@
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class LazyInitializeAtLeastOnceDestroyNever {
|
class LazyInitializeAtLeastOnceDestroyNever {
|
||||||
@ -247,7 +255,7 @@ struct npy_api {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static npy_api &get() {
|
static npy_api &get() {
|
||||||
static LazyInitializeAtLeastOnceDestroyNever<npy_api> api_init;
|
PYBIND11_CONSTINIT static LazyInitializeAtLeastOnceDestroyNever<npy_api> api_init;
|
||||||
return api_init.Get(lookup);
|
return api_init.Get(lookup);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -685,7 +693,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
static object &_dtype_from_pep3118() {
|
static object &_dtype_from_pep3118() {
|
||||||
static detail::LazyInitializeAtLeastOnceDestroyNever<object> imported_obj;
|
PYBIND11_CONSTINIT static detail::LazyInitializeAtLeastOnceDestroyNever<object>
|
||||||
|
imported_obj;
|
||||||
return imported_obj.Get([]() {
|
return imported_obj.Get([]() {
|
||||||
return detail::import_numpy_core_submodule("_internal").attr("_dtype_from_pep3118");
|
return detail::import_numpy_core_submodule("_internal").attr("_dtype_from_pep3118");
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user