File tree Expand file tree Collapse file tree 2 files changed +18
-2
lines changed
Expand file tree Collapse file tree 2 files changed +18
-2
lines changed Original file line number Diff line number Diff line change 162162#include < memory>
163163#include < typeindex>
164164#include < type_traits>
165+ #if defined(__has_include)
166+ # if __has_include(<version>)
167+ # include < version>
168+ # endif
169+ #endif
165170
166171#if PY_MAJOR_VERSION >= 3 // / Compatibility macros for various Python versions
167172#define PYBIND11_INSTANCE_METHOD_NEW (ptr, class_ ) PyInstanceMethod_New(ptr)
Original file line number Diff line number Diff line change 1010
1111#pragma once
1212
13+ #if defined(__cpp_lib_launder) && !(defined(_MSC_VER) && (_MSC_VER < 1914))
14+ # define PYBIND11_STD_LAUNDER std::launder
15+ # define PYBIND11_HAS_STD_LAUNDER 1
16+ #else
17+ # define PYBIND11_STD_LAUNDER
18+ # define PYBIND11_HAS_STD_LAUNDER 0
19+ #endif
20+
1321#if defined(__INTEL_COMPILER)
1422# pragma warning push
1523# pragma warning disable 68 // integer conversion resulted in a change of sign
3543# pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
3644# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
3745# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
38- # pragma GCC diagnostic ignored "-Wstrict-aliasing"
46+ # if !PYBIND11_HAS_STD_LAUNDER
47+ # pragma GCC diagnostic ignored "-Wstrict-aliasing"
48+ # endif
3949# pragma GCC diagnostic ignored "-Wattributes"
4050# if __GNUC__ >= 7
4151# pragma GCC diagnostic ignored "-Wnoexcept-type"
4858#include " detail/init.h"
4959
5060#include < memory>
61+ #include < new>
5162#include < vector>
5263#include < string>
5364#include < utility>
@@ -151,7 +162,7 @@ class cpp_function : public function {
151162# pragma GCC diagnostic pop
152163#endif
153164 if (!std::is_trivially_destructible<Func>::value)
154- rec->free_data = [](function_record *r) { ((capture *) &r->data )->~capture (); };
165+ rec->free_data = [](function_record *r) { PYBIND11_STD_LAUNDER ((capture *) &r->data )->~capture (); };
155166 } else {
156167 rec->data [0 ] = new capture { std::forward<Func>(f) };
157168 rec->free_data = [](function_record *r) { delete ((capture *) r->data [0 ]); };
You can’t perform that action at this time.
0 commit comments