Scarab  v2.9.0
Project 8 C++ Utility Library
cast.h
Go to the documentation of this file.
1 /*
2  pybind11/cast.h: Partial template specializations to cast between
3  C++ and Python types
4 
5  Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>
6 
7  All rights reserved. Use of this source code is governed by a
8  BSD-style license that can be found in the LICENSE file.
9 */
10 
11 #pragma once
12 
13 #include "pytypes.h"
14 #include "detail/typeid.h"
15 #include "detail/descr.h"
16 #include "detail/internals.h"
17 #include <array>
18 #include <limits>
19 #include <tuple>
20 #include <type_traits>
21 
22 #if defined(PYBIND11_CPP17)
23 # if defined(__has_include)
24 # if __has_include(<string_view>)
25 # define PYBIND11_HAS_STRING_VIEW
26 # endif
27 # elif defined(_MSC_VER)
28 # define PYBIND11_HAS_STRING_VIEW
29 # endif
30 #endif
31 #ifdef PYBIND11_HAS_STRING_VIEW
32 #include <string_view>
33 #endif
34 
36 NAMESPACE_BEGIN(detail)
37 
38 class loader_life_support {
41 public:
44  get_internals().loader_patient_stack.push_back(nullptr);
45  }
46 
49  auto &stack = get_internals().loader_patient_stack;
50  if (stack.empty())
51  pybind11_fail("loader_life_support: internal error");
52 
53  auto ptr = stack.back();
54  stack.pop_back();
55  Py_CLEAR(ptr);
56 
57  // A heuristic to reduce the stack's capacity (e.g. after long recursive calls)
58  if (stack.capacity() > 16 && stack.size() != 0 && stack.capacity() / stack.size() > 2)
59  stack.shrink_to_fit();
60  }
61 
65  auto &stack = get_internals().loader_patient_stack;
66  if (stack.empty())
67  throw cast_error("When called outside a bound function, py::cast() cannot "
68  "do Python -> C++ conversions which require the creation "
69  "of temporary values");
70 
71  auto &list_ptr = stack.back();
72  if (list_ptr == nullptr) {
73  list_ptr = PyList_New(1);
74  if (!list_ptr)
75  pybind11_fail("loader_life_support: error allocating list");
76  PyList_SET_ITEM(list_ptr, 0, h.inc_ref().ptr());
77  } else {
78  auto result = PyList_Append(list_ptr, h.ptr());
79  if (result == -1)
80  pybind11_fail("loader_life_support: error adding patient");
81  }
82  }
83 };
84 
85 // Gets the cache entry for the given type, creating it if necessary. The return value is the pair
86 // returned by emplace, i.e. an iterator for the entry and a bool set to `true` if the entry was
87 // just created.
88 inline std::pair<decltype(internals::registered_types_py)::iterator, bool> all_type_info_get_cache(PyTypeObject *type);
89 
90 // Populates a just-created cache entry.
91 PYBIND11_NOINLINE inline void all_type_info_populate(PyTypeObject *t, std::vector<type_info *> &bases) {
92  std::vector<PyTypeObject *> check;
93  for (handle parent : reinterpret_borrow<tuple>(t->tp_bases))
94  check.push_back((PyTypeObject *) parent.ptr());
95 
96  auto const &type_dict = get_internals().registered_types_py;
97  for (size_t i = 0; i < check.size(); i++) {
98  auto type = check[i];
99  // Ignore Python2 old-style class super type:
100  if (!PyType_Check((PyObject *) type)) continue;
101 
102  // Check `type` in the current set of registered python types:
103  auto it = type_dict.find(type);
104  if (it != type_dict.end()) {
105  // We found a cache entry for it, so it's either pybind-registered or has pre-computed
106  // pybind bases, but we have to make sure we haven't already seen the type(s) before: we
107  // want to follow Python/virtual C++ rules that there should only be one instance of a
108  // common base.
109  for (auto *tinfo : it->second) {
110  // NB: Could use a second set here, rather than doing a linear search, but since
111  // having a large number of immediate pybind11-registered types seems fairly
112  // unlikely, that probably isn't worthwhile.
113  bool found = false;
114  for (auto *known : bases) {
115  if (known == tinfo) { found = true; break; }
116  }
117  if (!found) bases.push_back(tinfo);
118  }
119  }
120  else if (type->tp_bases) {
121  // It's some python type, so keep follow its bases classes to look for one or more
122  // registered types
123  if (i + 1 == check.size()) {
124  // When we're at the end, we can pop off the current element to avoid growing
125  // `check` when adding just one base (which is typical--i.e. when there is no
126  // multiple inheritance)
127  check.pop_back();
128  i--;
129  }
130  for (handle parent : reinterpret_borrow<tuple>(type->tp_bases))
131  check.push_back((PyTypeObject *) parent.ptr());
132  }
133  }
134 }
135 
146 inline const std::vector<detail::type_info *> &all_type_info(PyTypeObject *type) {
147  auto ins = all_type_info_get_cache(type);
148  if (ins.second)
149  // New cache entry: populate it
150  all_type_info_populate(type, ins.first->second);
151 
152  return ins.first->second;
153 }
154 
160 PYBIND11_NOINLINE inline detail::type_info* get_type_info(PyTypeObject *type) {
161  auto &bases = all_type_info(type);
162  if (bases.size() == 0)
163  return nullptr;
164  if (bases.size() > 1)
165  pybind11_fail("pybind11::detail::get_type_info: type has multiple pybind11-registered bases");
166  return bases.front();
167 }
168 
169 inline detail::type_info *get_local_type_info(const std::type_index &tp) {
170  auto &locals = registered_local_types_cpp();
171  auto it = locals.find(tp);
172  if (it != locals.end())
173  return it->second;
174  return nullptr;
175 }
176 
177 inline detail::type_info *get_global_type_info(const std::type_index &tp) {
178  auto &types = get_internals().registered_types_cpp;
179  auto it = types.find(tp);
180  if (it != types.end())
181  return it->second;
182  return nullptr;
183 }
184 
186 PYBIND11_NOINLINE inline detail::type_info *get_type_info(const std::type_index &tp,
187  bool throw_if_missing = false) {
188  if (auto ltype = get_local_type_info(tp))
189  return ltype;
190  if (auto gtype = get_global_type_info(tp))
191  return gtype;
192 
193  if (throw_if_missing) {
194  std::string tname = tp.name();
195  detail::clean_type_id(tname);
196  pybind11_fail("pybind11::detail::get_type_info: unable to find type info for \"" + tname + "\"");
197  }
198  return nullptr;
199 }
200 
201 PYBIND11_NOINLINE inline handle get_type_handle(const std::type_info &tp, bool throw_if_missing) {
202  detail::type_info *type_info = get_type_info(tp, throw_if_missing);
203  return handle(type_info ? ((PyObject *) type_info->type) : nullptr);
204 }
205 
207  instance *inst = nullptr;
208  size_t index = 0u;
209  const detail::type_info *type = nullptr;
210  void **vh = nullptr;
211 
212  // Main constructor for a found value/holder:
213  value_and_holder(instance *i, const detail::type_info *type, size_t vpos, size_t index) :
214  inst{i}, index{index}, type{type},
215  vh{inst->simple_layout ? inst->simple_value_holder : &inst->nonsimple.values_and_holders[vpos]}
216  {}
217 
218  // Default constructor (used to signal a value-and-holder not found by get_value_and_holder())
220 
221  // Used for past-the-end iterator
222  value_and_holder(size_t index) : index{index} {}
223 
224  template <typename V = void> V *&value_ptr() const {
225  return reinterpret_cast<V *&>(vh[0]);
226  }
227  // True if this `value_and_holder` has a non-null value pointer
228  explicit operator bool() const { return value_ptr(); }
229 
230  template <typename H> H &holder() const {
231  return reinterpret_cast<H &>(vh[1]);
232  }
233  bool holder_constructed() const {
234  return inst->simple_layout
236  : inst->nonsimple.status[index] & instance::status_holder_constructed;
237  }
238  void set_holder_constructed(bool v = true) {
239  if (inst->simple_layout)
240  inst->simple_holder_constructed = v;
241  else if (v)
242  inst->nonsimple.status[index] |= instance::status_holder_constructed;
243  else
244  inst->nonsimple.status[index] &= (uint8_t) ~instance::status_holder_constructed;
245  }
246  bool instance_registered() const {
247  return inst->simple_layout
249  : inst->nonsimple.status[index] & instance::status_instance_registered;
250  }
251  void set_instance_registered(bool v = true) {
252  if (inst->simple_layout)
253  inst->simple_instance_registered = v;
254  else if (v)
255  inst->nonsimple.status[index] |= instance::status_instance_registered;
256  else
257  inst->nonsimple.status[index] &= (uint8_t) ~instance::status_instance_registered;
258  }
259 };
260 
261 // Container for accessing and iterating over an instance's values/holders
263 private:
265  using type_vec = std::vector<detail::type_info *>;
266  const type_vec &tinfo;
267 
268 public:
269  values_and_holders(instance *inst) : inst{inst}, tinfo(all_type_info(Py_TYPE(inst))) {}
270 
271  struct iterator {
272  private:
273  instance *inst = nullptr;
274  const type_vec *types = nullptr;
276  friend struct values_and_holders;
277  iterator(instance *inst, const type_vec *tinfo)
278  : inst{inst}, types{tinfo},
279  curr(inst /* instance */,
280  types->empty() ? nullptr : (*types)[0] /* type info */,
281  0, /* vpos: (non-simple types only): the first vptr comes first */
282  0 /* index */)
283  {}
284  // Past-the-end iterator:
285  iterator(size_t end) : curr(end) {}
286  public:
287  bool operator==(const iterator &other) { return curr.index == other.curr.index; }
288  bool operator!=(const iterator &other) { return curr.index != other.curr.index; }
290  if (!inst->simple_layout)
291  curr.vh += 1 + (*types)[curr.index]->holder_size_in_ptrs;
292  ++curr.index;
293  curr.type = curr.index < types->size() ? (*types)[curr.index] : nullptr;
294  return *this;
295  }
296  value_and_holder &operator*() { return curr; }
297  value_and_holder *operator->() { return &curr; }
298  };
299 
300  iterator begin() { return iterator(inst, &tinfo); }
301  iterator end() { return iterator(tinfo.size()); }
302 
303  iterator find(const type_info *find_type) {
304  auto it = begin(), endit = end();
305  while (it != endit && it->type != find_type) ++it;
306  return it;
307  }
308 
309  size_t size() { return tinfo.size(); }
310 };
311 
322 PYBIND11_NOINLINE inline value_and_holder instance::get_value_and_holder(const type_info *find_type /*= nullptr default in common.h*/, bool throw_if_missing /*= true in common.h*/) {
323  // Optimize common case:
324  if (!find_type || Py_TYPE(this) == find_type->type)
325  return value_and_holder(this, find_type, 0, 0);
326 
327  detail::values_and_holders vhs(this);
328  auto it = vhs.find(find_type);
329  if (it != vhs.end())
330  return *it;
331 
332  if (!throw_if_missing)
333  return value_and_holder();
334 
335 #if defined(NDEBUG)
336  pybind11_fail("pybind11::detail::instance::get_value_and_holder: "
337  "type is not a pybind11 base of the given instance "
338  "(compile in debug mode for type details)");
339 #else
340  pybind11_fail("pybind11::detail::instance::get_value_and_holder: `" +
341  std::string(find_type->type->tp_name) + "' is not a pybind11 base of the given `" +
342  std::string(Py_TYPE(this)->tp_name) + "' instance");
343 #endif
344 }
345 
346 PYBIND11_NOINLINE inline void instance::allocate_layout() {
347  auto &tinfo = all_type_info(Py_TYPE(this));
348 
349  const size_t n_types = tinfo.size();
350 
351  if (n_types == 0)
352  pybind11_fail("instance allocation failed: new instance has no pybind11-registered base types");
353 
354  simple_layout =
355  n_types == 1 && tinfo.front()->holder_size_in_ptrs <= instance_simple_holder_in_ptrs();
356 
357  // Simple path: no python-side multiple inheritance, and a small-enough holder
358  if (simple_layout) {
359  simple_value_holder[0] = nullptr;
360  simple_holder_constructed = false;
361  simple_instance_registered = false;
362  }
363  else { // multiple base types or a too-large holder
364  // Allocate space to hold: [v1*][h1][v2*][h2]...[bb...] where [vN*] is a value pointer,
365  // [hN] is the (uninitialized) holder instance for value N, and [bb...] is a set of bool
366  // values that tracks whether each associated holder has been initialized. Each [block] is
367  // padded, if necessary, to an integer multiple of sizeof(void *).
368  size_t space = 0;
369  for (auto t : tinfo) {
370  space += 1; // value pointer
371  space += t->holder_size_in_ptrs; // holder instance
372  }
373  size_t flags_at = space;
374  space += size_in_ptrs(n_types); // status bytes (holder_constructed and instance_registered)
375 
376  // Allocate space for flags, values, and holders, and initialize it to 0 (flags and values,
377  // in particular, need to be 0). Use Python's memory allocation functions: in Python 3.6
378  // they default to using pymalloc, which is designed to be efficient for small allocations
379  // like the one we're doing here; in earlier versions (and for larger allocations) they are
380  // just wrappers around malloc.
381 #if PY_VERSION_HEX >= 0x03050000
382  nonsimple.values_and_holders = (void **) PyMem_Calloc(space, sizeof(void *));
383  if (!nonsimple.values_and_holders) throw std::bad_alloc();
384 #else
385  nonsimple.values_and_holders = (void **) PyMem_New(void *, space);
386  if (!nonsimple.values_and_holders) throw std::bad_alloc();
387  std::memset(nonsimple.values_and_holders, 0, space * sizeof(void *));
388 #endif
389  nonsimple.status = reinterpret_cast<uint8_t *>(&nonsimple.values_and_holders[flags_at]);
390  }
391  owned = true;
392 }
393 
394 PYBIND11_NOINLINE inline void instance::deallocate_layout() {
395  if (!simple_layout)
396  PyMem_Free(nonsimple.values_and_holders);
397 }
398 
399 PYBIND11_NOINLINE inline bool isinstance_generic(handle obj, const std::type_info &tp) {
400  handle type = detail::get_type_handle(tp, false);
401  if (!type)
402  return false;
403  return isinstance(obj, type);
404 }
405 
406 PYBIND11_NOINLINE inline std::string error_string() {
407  if (!PyErr_Occurred()) {
408  PyErr_SetString(PyExc_RuntimeError, "Unknown internal error occurred");
409  return "Unknown internal error occurred";
410  }
411 
412  error_scope scope; // Preserve error state
413 
414  std::string errorString;
415  if (scope.type) {
416  errorString += handle(scope.type).attr("__name__").cast<std::string>();
417  errorString += ": ";
418  }
419  if (scope.value)
420  errorString += (std::string) str(scope.value);
421 
422  PyErr_NormalizeException(&scope.type, &scope.value, &scope.trace);
423 
424 #if PY_MAJOR_VERSION >= 3
425  if (scope.trace != nullptr)
426  PyException_SetTraceback(scope.value, scope.trace);
427 #endif
428 
429 #if !defined(PYPY_VERSION)
430  if (scope.trace) {
431  PyTracebackObject *trace = (PyTracebackObject *) scope.trace;
432 
433  /* Get the deepest trace possible */
434  while (trace->tb_next)
435  trace = trace->tb_next;
436 
437  PyFrameObject *frame = trace->tb_frame;
438  errorString += "\n\nAt:\n";
439  while (frame) {
440  int lineno = PyFrame_GetLineNumber(frame);
441  errorString +=
442  " " + handle(frame->f_code->co_filename).cast<std::string>() +
443  "(" + std::to_string(lineno) + "): " +
444  handle(frame->f_code->co_name).cast<std::string>() + "\n";
445  frame = frame->f_back;
446  }
447  }
448 #endif
449 
450  return errorString;
451 }
452 
453 PYBIND11_NOINLINE inline handle get_object_handle(const void *ptr, const detail::type_info *type ) {
454  auto &instances = get_internals().registered_instances;
455  auto range = instances.equal_range(ptr);
456  for (auto it = range.first; it != range.second; ++it) {
457  for (auto vh : values_and_holders(it->second)) {
458  if (vh.type == type)
459  return handle((PyObject *) it->second);
460  }
461  }
462  return handle();
463 }
464 
465 inline PyThreadState *get_thread_state_unchecked() {
466 #if defined(PYPY_VERSION)
467  return PyThreadState_GET();
468 #elif PY_VERSION_HEX < 0x03000000
469  return _PyThreadState_Current;
470 #elif PY_VERSION_HEX < 0x03050000
471  return (PyThreadState*) _Py_atomic_load_relaxed(&_PyThreadState_Current);
472 #elif PY_VERSION_HEX < 0x03050200
473  return (PyThreadState*) _PyThreadState_Current.value;
474 #else
475  return _PyThreadState_UncheckedGet();
476 #endif
477 }
478 
479 // Forward declarations
480 inline void keep_alive_impl(handle nurse, handle patient);
481 inline PyObject *make_new_instance(PyTypeObject *type);
482 
484 public:
485  PYBIND11_NOINLINE type_caster_generic(const std::type_info &type_info)
486  : typeinfo(get_type_info(type_info)), cpptype(&type_info) { }
487 
488  type_caster_generic(const type_info *typeinfo)
489  : typeinfo(typeinfo), cpptype(typeinfo ? typeinfo->cpptype : nullptr) { }
490 
491  bool load(handle src, bool convert) {
492  return load_impl<type_caster_generic>(src, convert);
493  }
494 
495  PYBIND11_NOINLINE static handle cast(const void *_src, return_value_policy policy, handle parent,
496  const detail::type_info *tinfo,
497  void *(*copy_constructor)(const void *),
498  void *(*move_constructor)(const void *),
499  const void *existing_holder = nullptr) {
500  if (!tinfo) // no type info: error will be set already
501  return handle();
502 
503  void *src = const_cast<void *>(_src);
504  if (src == nullptr)
505  return none().release();
506 
507  auto it_instances = get_internals().registered_instances.equal_range(src);
508  for (auto it_i = it_instances.first; it_i != it_instances.second; ++it_i) {
509  for (auto instance_type : detail::all_type_info(Py_TYPE(it_i->second))) {
510  if (instance_type && same_type(*instance_type->cpptype, *tinfo->cpptype))
511  return handle((PyObject *) it_i->second).inc_ref();
512  }
513  }
514 
515  auto inst = reinterpret_steal<object>(make_new_instance(tinfo->type));
516  auto wrapper = reinterpret_cast<instance *>(inst.ptr());
517  wrapper->owned = false;
518  void *&valueptr = values_and_holders(wrapper).begin()->value_ptr();
519 
520  switch (policy) {
521  case return_value_policy::automatic:
522  case return_value_policy::take_ownership:
523  valueptr = src;
524  wrapper->owned = true;
525  break;
526 
527  case return_value_policy::automatic_reference:
528  case return_value_policy::reference:
529  valueptr = src;
530  wrapper->owned = false;
531  break;
532 
533  case return_value_policy::copy:
534  if (copy_constructor)
535  valueptr = copy_constructor(src);
536  else
537  throw cast_error("return_value_policy = copy, but the "
538  "object is non-copyable!");
539  wrapper->owned = true;
540  break;
541 
543  if (move_constructor)
544  valueptr = move_constructor(src);
545  else if (copy_constructor)
546  valueptr = copy_constructor(src);
547  else
548  throw cast_error("return_value_policy = move, but the "
549  "object is neither movable nor copyable!");
550  wrapper->owned = true;
551  break;
552 
553  case return_value_policy::reference_internal:
554  valueptr = src;
555  wrapper->owned = false;
556  keep_alive_impl(inst, parent);
557  break;
558 
559  default:
560  throw cast_error("unhandled return_value_policy: should not happen!");
561  }
562 
563  tinfo->init_instance(wrapper, existing_holder);
564 
565  return inst.release();
566  }
567 
568  // Base methods for generic caster; there are overridden in copyable_holder_caster
569  void load_value(value_and_holder &&v_h) {
570  auto *&vptr = v_h.value_ptr();
571  // Lazy allocation for unallocated values:
572  if (vptr == nullptr) {
573  auto *type = v_h.type ? v_h.type : typeinfo;
574  if (type->operator_new) {
575  vptr = type->operator_new(type->type_size);
576  } else {
577  #if defined(PYBIND11_CPP17)
578  if (type->type_align > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
579  vptr = ::operator new(type->type_size,
580  (std::align_val_t) type->type_align);
581  else
582  #endif
583  vptr = ::operator new(type->type_size);
584  }
585  }
586  value = vptr;
587  }
588  bool try_implicit_casts(handle src, bool convert) {
589  for (auto &cast : typeinfo->implicit_casts) {
590  type_caster_generic sub_caster(*cast.first);
591  if (sub_caster.load(src, convert)) {
592  value = cast.second(sub_caster.value);
593  return true;
594  }
595  }
596  return false;
597  }
598  bool try_direct_conversions(handle src) {
599  for (auto &converter : *typeinfo->direct_conversions) {
600  if (converter(src.ptr(), value))
601  return true;
602  }
603  return false;
604  }
605  void check_holder_compat() {}
606 
607  PYBIND11_NOINLINE static void *local_load(PyObject *src, const type_info *ti) {
608  auto caster = type_caster_generic(ti);
609  if (caster.load(src, false))
610  return caster.value;
611  return nullptr;
612  }
613 
616  PYBIND11_NOINLINE bool try_load_foreign_module_local(handle src) {
617  constexpr auto *local_key = PYBIND11_MODULE_LOCAL_ID;
618  const auto pytype = src.get_type();
619  if (!hasattr(pytype, local_key))
620  return false;
621 
622  type_info *foreign_typeinfo = reinterpret_borrow<capsule>(getattr(pytype, local_key));
623  // Only consider this foreign loader if actually foreign and is a loader of the correct cpp type
624  if (foreign_typeinfo->module_local_load == &local_load
625  || (cpptype && !same_type(*cpptype, *foreign_typeinfo->cpptype)))
626  return false;
627 
628  if (auto result = foreign_typeinfo->module_local_load(src.ptr(), foreign_typeinfo)) {
629  value = result;
630  return true;
631  }
632  return false;
633  }
634 
635  // Implementation of `load`; this takes the type of `this` so that it can dispatch the relevant
636  // bits of code between here and copyable_holder_caster where the two classes need different
637  // logic (without having to resort to virtual inheritance).
638  template <typename ThisT>
639  PYBIND11_NOINLINE bool load_impl(handle src, bool convert) {
640  if (!src) return false;
641  if (!typeinfo) return try_load_foreign_module_local(src);
642  if (src.is_none()) {
643  // Defer accepting None to other overloads (if we aren't in convert mode):
644  if (!convert) return false;
645  value = nullptr;
646  return true;
647  }
648 
649  auto &this_ = static_cast<ThisT &>(*this);
650  this_.check_holder_compat();
651 
652  PyTypeObject *srctype = Py_TYPE(src.ptr());
653 
654  // Case 1: If src is an exact type match for the target type then we can reinterpret_cast
655  // the instance's value pointer to the target type:
656  if (srctype == typeinfo->type) {
657  this_.load_value(reinterpret_cast<instance *>(src.ptr())->get_value_and_holder());
658  return true;
659  }
660  // Case 2: We have a derived class
661  else if (PyType_IsSubtype(srctype, typeinfo->type)) {
662  auto &bases = all_type_info(srctype);
663  bool no_cpp_mi = typeinfo->simple_type;
664 
665  // Case 2a: the python type is a Python-inherited derived class that inherits from just
666  // one simple (no MI) pybind11 class, or is an exact match, so the C++ instance is of
667  // the right type and we can use reinterpret_cast.
668  // (This is essentially the same as case 2b, but because not using multiple inheritance
669  // is extremely common, we handle it specially to avoid the loop iterator and type
670  // pointer lookup overhead)
671  if (bases.size() == 1 && (no_cpp_mi || bases.front()->type == typeinfo->type)) {
672  this_.load_value(reinterpret_cast<instance *>(src.ptr())->get_value_and_holder());
673  return true;
674  }
675  // Case 2b: the python type inherits from multiple C++ bases. Check the bases to see if
676  // we can find an exact match (or, for a simple C++ type, an inherited match); if so, we
677  // can safely reinterpret_cast to the relevant pointer.
678  else if (bases.size() > 1) {
679  for (auto base : bases) {
680  if (no_cpp_mi ? PyType_IsSubtype(base->type, typeinfo->type) : base->type == typeinfo->type) {
681  this_.load_value(reinterpret_cast<instance *>(src.ptr())->get_value_and_holder(base));
682  return true;
683  }
684  }
685  }
686 
687  // Case 2c: C++ multiple inheritance is involved and we couldn't find an exact type match
688  // in the registered bases, above, so try implicit casting (needed for proper C++ casting
689  // when MI is involved).
690  if (this_.try_implicit_casts(src, convert))
691  return true;
692  }
693 
694  // Perform an implicit conversion
695  if (convert) {
696  for (auto &converter : typeinfo->implicit_conversions) {
697  auto temp = reinterpret_steal<object>(converter(src.ptr(), typeinfo->type));
698  if (load_impl<ThisT>(temp, false)) {
700  return true;
701  }
702  }
703  if (this_.try_direct_conversions(src))
704  return true;
705  }
706 
707  // Failed to match local typeinfo. Try again with global.
708  if (typeinfo->module_local) {
709  if (auto gtype = get_global_type_info(*typeinfo->cpptype)) {
710  typeinfo = gtype;
711  return load(src, false);
712  }
713  }
714 
715  // Global typeinfo has precedence over foreign module_local
716  return try_load_foreign_module_local(src);
717  }
718 
719 
720  // Called to do type lookup and wrap the pointer and type in a pair when a dynamic_cast
721  // isn't needed or can't be used. If the type is unknown, sets the error and returns a pair
722  // with .second = nullptr. (p.first = nullptr is not an error: it becomes None).
723  PYBIND11_NOINLINE static std::pair<const void *, const type_info *> src_and_type(
724  const void *src, const std::type_info &cast_type, const std::type_info *rtti_type = nullptr) {
725  if (auto *tpi = get_type_info(cast_type))
726  return {src, const_cast<const type_info *>(tpi)};
727 
728  // Not found, set error:
729  std::string tname = rtti_type ? rtti_type->name() : cast_type.name();
730  detail::clean_type_id(tname);
731  std::string msg = "Unregistered type : " + tname;
732  PyErr_SetString(PyExc_TypeError, msg.c_str());
733  return {nullptr, nullptr};
734  }
735 
736  const type_info *typeinfo = nullptr;
737  const std::type_info *cpptype = nullptr;
738  void *value = nullptr;
739 };
740 
748 template <typename T>
749 using cast_op_type =
751  typename std::add_pointer<intrinsic_t<T>>::type,
752  typename std::add_lvalue_reference<intrinsic_t<T>>::type>;
753 
761 template <typename T>
762 using movable_cast_op_type =
764  typename std::add_pointer<intrinsic_t<T>>::type,
766  typename std::add_rvalue_reference<intrinsic_t<T>>::type,
767  typename std::add_lvalue_reference<intrinsic_t<T>>::type>>;
768 
769 // std::is_copy_constructible isn't quite enough: it lets std::vector<T> (and similar) through when
770 // T is non-copyable, but code containing such a copy constructor fails to actually compile.
771 template <typename T, typename SFINAE = void> struct is_copy_constructible : std::is_copy_constructible<T> {};
772 
773 // Specialization for types that appear to be copy constructible but also look like stl containers
774 // (we specifically check for: has `value_type` and `reference` with `reference = value_type&`): if
775 // so, copy constructability depends on whether the value_type is copy constructible.
776 template <typename Container> struct is_copy_constructible<Container, enable_if_t<all_of<
777  std::is_copy_constructible<Container>,
778  std::is_same<typename Container::value_type &, typename Container::reference>
779  >::value>> : is_copy_constructible<typename Container::value_type> {};
780 
781 #if !defined(PYBIND11_CPP17)
782 // Likewise for std::pair before C++17 (which mandates that the copy constructor not exist when the
783 // two types aren't themselves copy constructible).
784 template <typename T1, typename T2> struct is_copy_constructible<std::pair<T1, T2>>
785  : all_of<is_copy_constructible<T1>, is_copy_constructible<T2>> {};
786 #endif
787 
788 NAMESPACE_END(detail)
789 
790 // polymorphic_type_hook<itype>::get(src, tinfo) determines whether the object pointed
791 // to by `src` actually is an instance of some class derived from `itype`.
792 // If so, it sets `tinfo` to point to the std::type_info representing that derived
793 // type, and returns a pointer to the start of the most-derived object of that type
794 // (in which `src` is a subobject; this will be the same address as `src` in most
795 // single inheritance cases). If not, or if `src` is nullptr, it simply returns `src`
796 // and leaves `tinfo` at its default value of nullptr.
797 //
798 // The default polymorphic_type_hook just returns src. A specialization for polymorphic
799 // types determines the runtime type of the passed object and adjusts the this-pointer
800 // appropriately via dynamic_cast<void*>. This is what enables a C++ Animal* to appear
801 // to Python as a Dog (if Dog inherits from Animal, Animal is polymorphic, Dog is
802 // registered with pybind11, and this Animal is in fact a Dog).
803 //
804 // You may specialize polymorphic_type_hook yourself for types that want to appear
805 // polymorphic to Python but do not use C++ RTTI. (This is a not uncommon pattern
806 // in performance-sensitive applications, used most notably in LLVM.)
807 template <typename itype, typename SFINAE = void>
809 {
810  static const void *get(const itype *src, const std::type_info*&) { return src; }
811 };
812 template <typename itype>
813 struct polymorphic_type_hook<itype, detail::enable_if_t<std::is_polymorphic<itype>::value>>
814 {
815  static const void *get(const itype *src, const std::type_info*& type) {
816  type = src ? &typeid(*src) : nullptr;
817  return dynamic_cast<const void*>(src);
818  }
819 };
820 
821 NAMESPACE_BEGIN(detail)
822 
823 template <typename type> class type_caster_base : public type_caster_generic {
826 
827 public:
828  static constexpr auto name = _<type>();
829 
830  type_caster_base() : type_caster_base(typeid(type)) { }
831  explicit type_caster_base(const std::type_info &info) : type_caster_generic(info) { }
832 
833  static handle cast(const itype &src, return_value_policy policy, handle parent) {
834  if (policy == return_value_policy::automatic || policy == return_value_policy::automatic_reference)
835  policy = return_value_policy::copy;
836  return cast(&src, policy, parent);
837  }
838 
839  static handle cast(itype &&src, return_value_policy, handle parent) {
840  return cast(&src, return_value_policy::move, parent);
841  }
842 
843  // Returns a (pointer, type_info) pair taking care of necessary type lookup for a
844  // polymorphic type (using RTTI by default, but can be overridden by specializing
845  // polymorphic_type_hook). If the instance isn't derived, returns the base version.
846  static std::pair<const void *, const type_info *> src_and_type(const itype *src) {
847  auto &cast_type = typeid(itype);
848  const std::type_info *instance_type = nullptr;
849  const void *vsrc = polymorphic_type_hook<itype>::get(src, instance_type);
850  if (instance_type && !same_type(cast_type, *instance_type)) {
851  // This is a base pointer to a derived type. If the derived type is registered
852  // with pybind11, we want to make the full derived object available.
853  // In the typical case where itype is polymorphic, we get the correct
854  // derived pointer (which may be != base pointer) by a dynamic_cast to
855  // most derived type. If itype is not polymorphic, we won't get here
856  // except via a user-provided specialization of polymorphic_type_hook,
857  // and the user has promised that no this-pointer adjustment is
858  // required in that case, so it's OK to use static_cast.
859  if (const auto *tpi = get_type_info(*instance_type))
860  return {vsrc, tpi};
861  }
862  // Otherwise we have either a nullptr, an `itype` pointer, or an unknown derived pointer, so
863  // don't do a cast
864  return type_caster_generic::src_and_type(src, cast_type, instance_type);
865  }
866 
867  static handle cast(const itype *src, return_value_policy policy, handle parent) {
868  auto st = src_and_type(src);
870  st.first, policy, parent, st.second,
871  make_copy_constructor(src), make_move_constructor(src));
872  }
873 
874  static handle cast_holder(const itype *src, const void *holder) {
875  auto st = src_and_type(src);
877  st.first, return_value_policy::take_ownership, {}, st.second,
878  nullptr, nullptr, holder);
879  }
880 
881  template <typename T> using cast_op_type = detail::cast_op_type<T>;
882 
883  operator itype*() { return (type *) value; }
884  operator itype&() { if (!value) throw reference_cast_error(); return *((itype *) value); }
885 
886 protected:
887  using Constructor = void *(*)(const void *);
888 
889  /* Only enabled when the types are {copy,move}-constructible *and* when the type
890  does not have a private operator new implementation. */
892  static auto make_copy_constructor(const T *x) -> decltype(new T(*x), Constructor{}) {
893  return [](const void *arg) -> void * {
894  return new T(*reinterpret_cast<const T *>(arg));
895  };
896  }
897 
899  static auto make_move_constructor(const T *x) -> decltype(new T(std::move(*const_cast<T *>(x))), Constructor{}) {
900  return [](const void *arg) -> void * {
901  return new T(std::move(*const_cast<T *>(reinterpret_cast<const T *>(arg))));
902  };
903  }
904 
905  static Constructor make_copy_constructor(...) { return nullptr; }
906  static Constructor make_move_constructor(...) { return nullptr; }
907 };
908 
909 template <typename type, typename SFINAE = void> class type_caster : public type_caster_base<type> { };
910 template <typename type> using make_caster = type_caster<intrinsic_t<type>>;
911 
912 // Shortcut for calling a caster's `cast_op_type` cast operator for casting a type_caster to a T
913 template <typename T> typename make_caster<T>::template cast_op_type<T> cast_op(make_caster<T> &caster) {
914  return caster.operator typename make_caster<T>::template cast_op_type<T>();
915 }
918  return std::move(caster).operator
920 }
921 
922 template <typename type> class type_caster<std::reference_wrapper<type>> {
923 private:
926  using subcaster_cast_op_type = typename caster_t::template cast_op_type<type>;
927  static_assert(std::is_same<typename std::remove_const<type>::type &, subcaster_cast_op_type>::value,
928  "std::reference_wrapper<T> caster requires T to have a caster with an `T &` operator");
929 public:
930  bool load(handle src, bool convert) { return subcaster.load(src, convert); }
931  static constexpr auto name = caster_t::name;
932  static handle cast(const std::reference_wrapper<type> &src, return_value_policy policy, handle parent) {
933  // It is definitely wrong to take ownership of this pointer, so mask that rvp
934  if (policy == return_value_policy::take_ownership || policy == return_value_policy::automatic)
935  policy = return_value_policy::automatic_reference;
936  return caster_t::cast(&src.get(), policy, parent);
937  }
938  template <typename T> using cast_op_type = std::reference_wrapper<type>;
939  operator std::reference_wrapper<type>() { return subcaster.operator subcaster_cast_op_type&(); }
940 };
941 
942 #define PYBIND11_TYPE_CASTER(type, py_name) \
943  protected: \
944  type value; \
945  public: \
946  static constexpr auto name = py_name; \
947  template <typename T_, enable_if_t<std::is_same<type, remove_cv_t<T_>>::value, int> = 0> \
948  static handle cast(T_ *src, return_value_policy policy, handle parent) { \
949  if (!src) return none().release(); \
950  if (policy == return_value_policy::take_ownership) { \
951  auto h = cast(std::move(*src), policy, parent); delete src; return h; \
952  } else { \
953  return cast(*src, policy, parent); \
954  } \
955  } \
956  operator type*() { return &value; } \
957  operator type&() { return value; } \
958  operator type&&() && { return std::move(value); } \
959  template <typename T_> using cast_op_type = pybind11::detail::movable_cast_op_type<T_>
960 
961 
962 template <typename CharT> using is_std_char_type = any_of<
963  std::is_same<CharT, char>, /* std::string */
964  std::is_same<CharT, char16_t>, /* std::u16string */
965  std::is_same<CharT, char32_t>, /* std::u32string */
966  std::is_same<CharT, wchar_t> /* std::wstring */
967 >;
968 
969 template <typename T>
970 struct type_caster<T, enable_if_t<std::is_arithmetic<T>::value && !is_std_char_type<T>::value>> {
974 public:
975 
976  bool load(handle src, bool convert) {
977  py_type py_value;
978 
979  if (!src)
980  return false;
981 
983  if (convert || PyFloat_Check(src.ptr()))
984  py_value = (py_type) PyFloat_AsDouble(src.ptr());
985  else
986  return false;
987  } else if (PyFloat_Check(src.ptr())) {
988  return false;
990  py_value = as_unsigned<py_type>(src.ptr());
991  } else { // signed integer:
992  py_value = sizeof(T) <= sizeof(long)
993  ? (py_type) PyLong_AsLong(src.ptr())
995  }
996 
997  bool py_err = py_value == (py_type) -1 && PyErr_Occurred();
998 
999  // Protect std::numeric_limits::min/max with parentheses
1000  if (py_err || (std::is_integral<T>::value && sizeof(py_type) != sizeof(T) &&
1001  (py_value < (py_type) (std::numeric_limits<T>::min)() ||
1002  py_value > (py_type) (std::numeric_limits<T>::max)()))) {
1003  bool type_error = py_err && PyErr_ExceptionMatches(
1004 #if PY_VERSION_HEX < 0x03000000 && !defined(PYPY_VERSION)
1005  PyExc_SystemError
1006 #else
1007  PyExc_TypeError
1008 #endif
1009  );
1010  PyErr_Clear();
1011  if (type_error && convert && PyNumber_Check(src.ptr())) {
1012  auto tmp = reinterpret_steal<object>(std::is_floating_point<T>::value
1013  ? PyNumber_Float(src.ptr())
1014  : PyNumber_Long(src.ptr()));
1015  PyErr_Clear();
1016  return load(tmp, false);
1017  }
1018  return false;
1019  }
1020 
1021  value = (T) py_value;
1022  return true;
1023  }
1024 
1025  template<typename U = T>
1027  cast(U src, return_value_policy /* policy */, handle /* parent */) {
1028  return PyFloat_FromDouble((double) src);
1029  }
1030 
1031  template<typename U = T>
1032  static typename std::enable_if<!std::is_floating_point<U>::value && std::is_signed<U>::value && (sizeof(U) <= sizeof(long)), handle>::type
1033  cast(U src, return_value_policy /* policy */, handle /* parent */) {
1034  return PYBIND11_LONG_FROM_SIGNED((long) src);
1035  }
1036 
1037  template<typename U = T>
1038  static typename std::enable_if<!std::is_floating_point<U>::value && std::is_unsigned<U>::value && (sizeof(U) <= sizeof(unsigned long)), handle>::type
1039  cast(U src, return_value_policy /* policy */, handle /* parent */) {
1040  return PYBIND11_LONG_FROM_UNSIGNED((unsigned long) src);
1041  }
1042 
1043  template<typename U = T>
1044  static typename std::enable_if<!std::is_floating_point<U>::value && std::is_signed<U>::value && (sizeof(U) > sizeof(long)), handle>::type
1045  cast(U src, return_value_policy /* policy */, handle /* parent */) {
1046  return PyLong_FromLongLong((long long) src);
1047  }
1048 
1049  template<typename U = T>
1050  static typename std::enable_if<!std::is_floating_point<U>::value && std::is_unsigned<U>::value && (sizeof(U) > sizeof(unsigned long)), handle>::type
1051  cast(U src, return_value_policy /* policy */, handle /* parent */) {
1052  return PyLong_FromUnsignedLongLong((unsigned long long) src);
1053  }
1054 
1056 };
1057 
1058 template<typename T> struct void_caster {
1059 public:
1060  bool load(handle src, bool) {
1061  if (src && src.is_none())
1062  return true;
1063  return false;
1064  }
1065  static handle cast(T, return_value_policy /* policy */, handle /* parent */) {
1066  return none().inc_ref();
1067  }
1069 };
1070 
1071 template <> class type_caster<void_type> : public void_caster<void_type> {};
1072 
1073 template <> class type_caster<void> : public type_caster<void_type> {
1074 public:
1076 
1077  bool load(handle h, bool) {
1078  if (!h) {
1079  return false;
1080  } else if (h.is_none()) {
1081  value = nullptr;
1082  return true;
1083  }
1084 
1085  /* Check if this is a capsule */
1086  if (isinstance<capsule>(h)) {
1087  value = reinterpret_borrow<capsule>(h);
1088  return true;
1089  }
1090 
1091  /* Check if this is a C++ type */
1092  auto &bases = all_type_info((PyTypeObject *) h.get_type().ptr());
1093  if (bases.size() == 1) { // Only allowing loading from a single-value type
1094  value = values_and_holders(reinterpret_cast<instance *>(h.ptr())).begin()->value_ptr();
1095  return true;
1096  }
1097 
1098  /* Fail */
1099  return false;
1100  }
1101 
1102  static handle cast(const void *ptr, return_value_policy /* policy */, handle /* parent */) {
1103  if (ptr)
1104  return capsule(ptr).release();
1105  else
1106  return none().inc_ref();
1107  }
1108 
1109  template <typename T> using cast_op_type = void*&;
1110  operator void *&() { return value; }
1111  static constexpr auto name = _("capsule");
1112 private:
1113  void *value = nullptr;
1114 };
1115 
1116 template <> class type_caster<std::nullptr_t> : public void_caster<std::nullptr_t> { };
1117 
1118 template <> class type_caster<bool> {
1119 public:
1120  bool load(handle src, bool convert) {
1121  if (!src) return false;
1122  else if (src.ptr() == Py_True) { value = true; return true; }
1123  else if (src.ptr() == Py_False) { value = false; return true; }
1124  else if (convert || !strcmp("numpy.bool_", Py_TYPE(src.ptr())->tp_name)) {
1125  // (allow non-implicit conversion for numpy booleans)
1126 
1127  Py_ssize_t res = -1;
1128  if (src.is_none()) {
1129  res = 0; // None is implicitly converted to False
1130  }
1131  #if defined(PYPY_VERSION)
1132  // On PyPy, check that "__bool__" (or "__nonzero__" on Python 2.7) attr exists
1133  else if (hasattr(src, PYBIND11_BOOL_ATTR)) {
1134  res = PyObject_IsTrue(src.ptr());
1135  }
1136  #else
1137  // Alternate approach for CPython: this does the same as the above, but optimized
1138  // using the CPython API so as to avoid an unneeded attribute lookup.
1139  else if (auto tp_as_number = src.ptr()->ob_type->tp_as_number) {
1140  if (PYBIND11_NB_BOOL(tp_as_number)) {
1141  res = (*PYBIND11_NB_BOOL(tp_as_number))(src.ptr());
1142  }
1143  }
1144  #endif
1145  if (res == 0 || res == 1) {
1146  value = (bool) res;
1147  return true;
1148  }
1149  }
1150  return false;
1151  }
1152  static handle cast(bool src, return_value_policy /* policy */, handle /* parent */) {
1153  return handle(src ? Py_True : Py_False).inc_ref();
1154  }
1155  PYBIND11_TYPE_CASTER(bool, _("bool"));
1156 };
1157 
1158 // Helper class for UTF-{8,16,32} C++ stl strings:
1159 template <typename StringType, bool IsView = false> struct string_caster {
1160  using CharT = typename StringType::value_type;
1161 
1162  // Simplify life by being able to assume standard char sizes (the standard only guarantees
1163  // minimums, but Python requires exact sizes)
1164  static_assert(!std::is_same<CharT, char>::value || sizeof(CharT) == 1, "Unsupported char size != 1");
1165  static_assert(!std::is_same<CharT, char16_t>::value || sizeof(CharT) == 2, "Unsupported char16_t size != 2");
1166  static_assert(!std::is_same<CharT, char32_t>::value || sizeof(CharT) == 4, "Unsupported char32_t size != 4");
1167  // wchar_t can be either 16 bits (Windows) or 32 (everywhere else)
1168  static_assert(!std::is_same<CharT, wchar_t>::value || sizeof(CharT) == 2 || sizeof(CharT) == 4,
1169  "Unsupported wchar_t size != 2/4");
1170  static constexpr size_t UTF_N = 8 * sizeof(CharT);
1171 
1172  bool load(handle src, bool) {
1173 #if PY_MAJOR_VERSION < 3
1174  object temp;
1175 #endif
1176  handle load_src = src;
1177  if (!src) {
1178  return false;
1179  } else if (!PyUnicode_Check(load_src.ptr())) {
1180 #if PY_MAJOR_VERSION >= 3
1181  return load_bytes(load_src);
1182 #else
1183  if (sizeof(CharT) == 1) {
1184  return load_bytes(load_src);
1185  }
1186 
1187  // The below is a guaranteed failure in Python 3 when PyUnicode_Check returns false
1188  if (!PYBIND11_BYTES_CHECK(load_src.ptr()))
1189  return false;
1190 
1191  temp = reinterpret_steal<object>(PyUnicode_FromObject(load_src.ptr()));
1192  if (!temp) { PyErr_Clear(); return false; }
1193  load_src = temp;
1194 #endif
1195  }
1196 
1197  object utfNbytes = reinterpret_steal<object>(PyUnicode_AsEncodedString(
1198  load_src.ptr(), UTF_N == 8 ? "utf-8" : UTF_N == 16 ? "utf-16" : "utf-32", nullptr));
1199  if (!utfNbytes) { PyErr_Clear(); return false; }
1200 
1201  const CharT *buffer = reinterpret_cast<const CharT *>(PYBIND11_BYTES_AS_STRING(utfNbytes.ptr()));
1202  size_t length = (size_t) PYBIND11_BYTES_SIZE(utfNbytes.ptr()) / sizeof(CharT);
1203  if (UTF_N > 8) { buffer++; length--; } // Skip BOM for UTF-16/32
1204  value = StringType(buffer, length);
1205 
1206  // If we're loading a string_view we need to keep the encoded Python object alive:
1207  if (IsView)
1209 
1210  return true;
1211  }
1212 
1213  static handle cast(const StringType &src, return_value_policy /* policy */, handle /* parent */) {
1214  const char *buffer = reinterpret_cast<const char *>(src.data());
1215  ssize_t nbytes = ssize_t(src.size() * sizeof(CharT));
1216  handle s = decode_utfN(buffer, nbytes);
1217  if (!s) throw error_already_set();
1218  return s;
1219  }
1220 
1222 
1223 private:
1224  static handle decode_utfN(const char *buffer, ssize_t nbytes) {
1225 #if !defined(PYPY_VERSION)
1226  return
1227  UTF_N == 8 ? PyUnicode_DecodeUTF8(buffer, nbytes, nullptr) :
1228  UTF_N == 16 ? PyUnicode_DecodeUTF16(buffer, nbytes, nullptr, nullptr) :
1229  PyUnicode_DecodeUTF32(buffer, nbytes, nullptr, nullptr);
1230 #else
1231  // PyPy seems to have multiple problems related to PyUnicode_UTF*: the UTF8 version
1232  // sometimes segfaults for unknown reasons, while the UTF16 and 32 versions require a
1233  // non-const char * arguments, which is also a nuisance, so bypass the whole thing by just
1234  // passing the encoding as a string value, which works properly:
1235  return PyUnicode_Decode(buffer, nbytes, UTF_N == 8 ? "utf-8" : UTF_N == 16 ? "utf-16" : "utf-32", nullptr);
1236 #endif
1237  }
1238 
1239  // When loading into a std::string or char*, accept a bytes object as-is (i.e.
1240  // without any encoding/decoding attempt). For other C++ char sizes this is a no-op.
1241  // which supports loading a unicode from a str, doesn't take this path.
1242  template <typename C = CharT>
1243  bool load_bytes(enable_if_t<sizeof(C) == 1, handle> src) {
1244  if (PYBIND11_BYTES_CHECK(src.ptr())) {
1245  // We were passed a Python 3 raw bytes; accept it into a std::string or char*
1246  // without any encoding attempt.
1247  const char *bytes = PYBIND11_BYTES_AS_STRING(src.ptr());
1248  if (bytes) {
1249  value = StringType(bytes, (size_t) PYBIND11_BYTES_SIZE(src.ptr()));
1250  return true;
1251  }
1252  }
1253 
1254  return false;
1255  }
1256 
1257  template <typename C = CharT>
1258  bool load_bytes(enable_if_t<sizeof(C) != 1, handle>) { return false; }
1259 };
1260 
1261 template <typename CharT, class Traits, class Allocator>
1262 struct type_caster<std::basic_string<CharT, Traits, Allocator>, enable_if_t<is_std_char_type<CharT>::value>>
1263  : string_caster<std::basic_string<CharT, Traits, Allocator>> {};
1264 
1265 #ifdef PYBIND11_HAS_STRING_VIEW
1266 template <typename CharT, class Traits>
1267 struct type_caster<std::basic_string_view<CharT, Traits>, enable_if_t<is_std_char_type<CharT>::value>>
1268  : string_caster<std::basic_string_view<CharT, Traits>, true> {};
1269 #endif
1270 
1271 // Type caster for C-style strings. We basically use a std::string type caster, but also add the
1272 // ability to use None as a nullptr char* (which the string caster doesn't allow).
1273 template <typename CharT> struct type_caster<CharT, enable_if_t<is_std_char_type<CharT>::value>> {
1274  using StringType = std::basic_string<CharT>;
1277  bool none = false;
1278  CharT one_char = 0;
1279 public:
1280  bool load(handle src, bool convert) {
1281  if (!src) return false;
1282  if (src.is_none()) {
1283  // Defer accepting None to other overloads (if we aren't in convert mode):
1284  if (!convert) return false;
1285  none = true;
1286  return true;
1287  }
1288  return str_caster.load(src, convert);
1289  }
1290 
1291  static handle cast(const CharT *src, return_value_policy policy, handle parent) {
1292  if (src == nullptr) return pybind11::none().inc_ref();
1293  return StringCaster::cast(StringType(src), policy, parent);
1294  }
1295 
1296  static handle cast(CharT src, return_value_policy policy, handle parent) {
1298  handle s = PyUnicode_DecodeLatin1((const char *) &src, 1, nullptr);
1299  if (!s) throw error_already_set();
1300  return s;
1301  }
1302  return StringCaster::cast(StringType(1, src), policy, parent);
1303  }
1304 
1305  operator CharT*() { return none ? nullptr : const_cast<CharT *>(static_cast<StringType &>(str_caster).c_str()); }
1306  operator CharT&() {
1307  if (none)
1308  throw value_error("Cannot convert None to a character");
1309 
1310  auto &value = static_cast<StringType &>(str_caster);
1311  size_t str_len = value.size();
1312  if (str_len == 0)
1313  throw value_error("Cannot convert empty string to a character");
1314 
1315  // If we're in UTF-8 mode, we have two possible failures: one for a unicode character that
1316  // is too high, and one for multiple unicode characters (caught later), so we need to figure
1317  // out how long the first encoded character is in bytes to distinguish between these two
1318  // errors. We also allow want to allow unicode characters U+0080 through U+00FF, as those
1319  // can fit into a single char value.
1320  if (StringCaster::UTF_N == 8 && str_len > 1 && str_len <= 4) {
1321  unsigned char v0 = static_cast<unsigned char>(value[0]);
1322  size_t char0_bytes = !(v0 & 0x80) ? 1 : // low bits only: 0-127
1323  (v0 & 0xE0) == 0xC0 ? 2 : // 0b110xxxxx - start of 2-byte sequence
1324  (v0 & 0xF0) == 0xE0 ? 3 : // 0b1110xxxx - start of 3-byte sequence
1325  4; // 0b11110xxx - start of 4-byte sequence
1326 
1327  if (char0_bytes == str_len) {
1328  // If we have a 128-255 value, we can decode it into a single char:
1329  if (char0_bytes == 2 && (v0 & 0xFC) == 0xC0) { // 0x110000xx 0x10xxxxxx
1330  one_char = static_cast<CharT>(((v0 & 3) << 6) + (static_cast<unsigned char>(value[1]) & 0x3F));
1331  return one_char;
1332  }
1333  // Otherwise we have a single character, but it's > U+00FF
1334  throw value_error("Character code point not in range(0x100)");
1335  }
1336  }
1337 
1338  // UTF-16 is much easier: we can only have a surrogate pair for values above U+FFFF, thus a
1339  // surrogate pair with total length 2 instantly indicates a range error (but not a "your
1340  // string was too long" error).
1341  else if (StringCaster::UTF_N == 16 && str_len == 2) {
1342  one_char = static_cast<CharT>(value[0]);
1343  if (one_char >= 0xD800 && one_char < 0xE000)
1344  throw value_error("Character code point not in range(0x10000)");
1345  }
1346 
1347  if (str_len != 1)
1348  throw value_error("Expected a character, but multi-character string found");
1349 
1350  one_char = value[0];
1351  return one_char;
1352  }
1353 
1354  static constexpr auto name = _(PYBIND11_STRING_NAME);
1355  template <typename _T> using cast_op_type = pybind11::detail::cast_op_type<_T>;
1356 };
1357 
1358 // Base implementation for std::tuple and std::pair
1359 template <template<typename...> class Tuple, typename... Ts> class tuple_caster {
1360  using type = Tuple<Ts...>;
1361  static constexpr auto size = sizeof...(Ts);
1363 public:
1364 
1365  bool load(handle src, bool convert) {
1366  if (!isinstance<sequence>(src))
1367  return false;
1368  const auto seq = reinterpret_borrow<sequence>(src);
1369  if (seq.size() != size)
1370  return false;
1371  return load_impl(seq, convert, indices{});
1372  }
1373 
1374  template <typename T>
1375  static handle cast(T &&src, return_value_policy policy, handle parent) {
1376  return cast_impl(std::forward<T>(src), policy, parent, indices{});
1377  }
1378 
1379  static constexpr auto name = _("Tuple[") + concat(make_caster<Ts>::name...) + _("]");
1380 
1381  template <typename T> using cast_op_type = type;
1382 
1383  operator type() & { return implicit_cast(indices{}); }
1384  operator type() && { return std::move(*this).implicit_cast(indices{}); }
1385 
1386 protected:
1387  template <size_t... Is>
1388  type implicit_cast(index_sequence<Is...>) & { return type(cast_op<Ts>(std::get<Is>(subcasters))...); }
1389  template <size_t... Is>
1390  type implicit_cast(index_sequence<Is...>) && { return type(cast_op<Ts>(std::move(std::get<Is>(subcasters)))...); }
1391 
1392  static constexpr bool load_impl(const sequence &, bool, index_sequence<>) { return true; }
1393 
1394  template <size_t... Is>
1395  bool load_impl(const sequence &seq, bool convert, index_sequence<Is...>) {
1396  for (bool r : {std::get<Is>(subcasters).load(seq[Is], convert)...})
1397  if (!r)
1398  return false;
1399  return true;
1400  }
1401 
1402  /* Implementation: Convert a C++ tuple into a Python tuple */
1403  template <typename T, size_t... Is>
1405  std::array<object, size> entries{{
1406  reinterpret_steal<object>(make_caster<Ts>::cast(std::get<Is>(std::forward<T>(src)), policy, parent))...
1407  }};
1408  for (const auto &entry: entries)
1409  if (!entry)
1410  return handle();
1411  tuple result(size);
1412  int counter = 0;
1413  for (auto & entry: entries)
1414  PyTuple_SET_ITEM(result.ptr(), counter++, entry.release().ptr());
1415  return result.release();
1416  }
1417 
1418  Tuple<make_caster<Ts>...> subcasters;
1419 };
1420 
1421 template <typename T1, typename T2> class type_caster<std::pair<T1, T2>>
1422  : public tuple_caster<std::pair, T1, T2> {};
1423 
1424 template <typename... Ts> class type_caster<std::tuple<Ts...>>
1425  : public tuple_caster<std::tuple, Ts...> {};
1426 
1429 template <typename T>
1431  static auto get(const T &p) -> decltype(p.get()) { return p.get(); }
1432 };
1433 
1435 template <typename type, typename holder_type>
1437 public:
1439  static_assert(std::is_base_of<base, type_caster<type>>::value,
1440  "Holder classes are only supported for custom types");
1441  using base::base;
1442  using base::cast;
1443  using base::typeinfo;
1444  using base::value;
1445 
1446  bool load(handle src, bool convert) {
1447  return base::template load_impl<copyable_holder_caster<type, holder_type>>(src, convert);
1448  }
1449 
1450  explicit operator type*() { return this->value; }
1451  explicit operator type&() { return *(this->value); }
1452  explicit operator holder_type*() { return std::addressof(holder); }
1453 
1454  // Workaround for Intel compiler bug
1455  // see pybind11 issue 94
1456  #if defined(__ICC) || defined(__INTEL_COMPILER)
1457  operator holder_type&() { return holder; }
1458  #else
1459  explicit operator holder_type&() { return holder; }
1460  #endif
1461 
1462  static handle cast(const holder_type &src, return_value_policy, handle) {
1463  const auto *ptr = holder_helper<holder_type>::get(src);
1464  return type_caster_base<type>::cast_holder(ptr, &src);
1465  }
1466 
1467 protected:
1468  friend class type_caster_generic;
1470  if (typeinfo->default_holder)
1471  throw cast_error("Unable to load a custom holder type from a default-holder instance");
1472  }
1473 
1475  if (v_h.holder_constructed()) {
1476  value = v_h.value_ptr();
1477  holder = v_h.template holder<holder_type>();
1478  return true;
1479  } else {
1480  throw cast_error("Unable to cast from non-held to held instance (T& to Holder<T>) "
1481 #if defined(NDEBUG)
1482  "(compile in debug mode for type information)");
1483 #else
1484  "of type '" + type_id<holder_type>() + "''");
1485 #endif
1486  }
1487  }
1488 
1490  bool try_implicit_casts(handle, bool) { return false; }
1491 
1493  bool try_implicit_casts(handle src, bool convert) {
1494  for (auto &cast : typeinfo->implicit_casts) {
1495  copyable_holder_caster sub_caster(*cast.first);
1496  if (sub_caster.load(src, convert)) {
1497  value = cast.second(sub_caster.value);
1498  holder = holder_type(sub_caster.holder, (type *) value);
1499  return true;
1500  }
1501  }
1502  return false;
1503  }
1504 
1505  static bool try_direct_conversions(handle) { return false; }
1506 
1507 
1508  holder_type holder;
1509 };
1510 
1512 template <typename T>
1513 class type_caster<std::shared_ptr<T>> : public copyable_holder_caster<T, std::shared_ptr<T>> { };
1514 
1515 template <typename type, typename holder_type>
1517  static_assert(std::is_base_of<type_caster_base<type>, type_caster<type>>::value,
1518  "Holder classes are only supported for custom types");
1519 
1520  static handle cast(holder_type &&src, return_value_policy, handle) {
1521  auto *ptr = holder_helper<holder_type>::get(src);
1522  return type_caster_base<type>::cast_holder(ptr, std::addressof(src));
1523  }
1524  static constexpr auto name = type_caster_base<type>::name;
1525 };
1526 
1527 template <typename type, typename deleter>
1528 class type_caster<std::unique_ptr<type, deleter>>
1529  : public move_only_holder_caster<type, std::unique_ptr<type, deleter>> { };
1530 
1531 template <typename type, typename holder_type>
1535 
1536 template <typename T, bool Value = false> struct always_construct_holder { static constexpr bool value = Value; };
1537 
1539 #define PYBIND11_DECLARE_HOLDER_TYPE(type, holder_type, ...) \
1540  namespace pybind11 { namespace detail { \
1541  template <typename type> \
1542  struct always_construct_holder<holder_type> : always_construct_holder<void, ##__VA_ARGS__> { }; \
1543  template <typename type> \
1544  class type_caster<holder_type, enable_if_t<!is_shared_ptr<holder_type>::value>> \
1545  : public type_caster_holder<type, holder_type> { }; \
1546  }}
1547 
1548 // PYBIND11_DECLARE_HOLDER_TYPE holder types:
1549 template <typename base, typename holder> struct is_holder_type :
1550  std::is_base_of<detail::type_caster_holder<base, holder>, detail::type_caster<holder>> {};
1551 // Specialization for always-supported unique_ptr holders:
1552 template <typename base, typename deleter> struct is_holder_type<base, std::unique_ptr<base, deleter>> :
1553  std::true_type {};
1554 
1555 template <typename T> struct handle_type_name { static constexpr auto name = _<T>(); };
1556 template <> struct handle_type_name<bytes> { static constexpr auto name = _(PYBIND11_BYTES_NAME); };
1557 template <> struct handle_type_name<args> { static constexpr auto name = _("*args"); };
1558 template <> struct handle_type_name<kwargs> { static constexpr auto name = _("**kwargs"); };
1559 
1560 template <typename type>
1563  bool load(handle src, bool /* convert */) { value = src; return static_cast<bool>(value); }
1564 
1566  bool load(handle src, bool /* convert */) {
1567  if (!isinstance<type>(src))
1568  return false;
1569  value = reinterpret_borrow<type>(src);
1570  return true;
1571  }
1572 
1573  static handle cast(const handle &src, return_value_policy /* policy */, handle /* parent */) {
1574  return src.inc_ref();
1575  }
1577 };
1578 
1579 template <typename T>
1581 
1582 // Our conditions for enabling moving are quite restrictive:
1583 // At compile time:
1584 // - T needs to be a non-const, non-pointer, non-reference type
1585 // - type_caster<T>::operator T&() must exist
1586 // - the type must be move constructible (obviously)
1587 // At run-time:
1588 // - if the type is non-copy-constructible, the object must be the sole owner of the type (i.e. it
1589 // must have ref_count() == 1)h
1590 // If any of the above are not satisfied, we fall back to copying.
1591 template <typename T> using move_is_plain_type = satisfies_none_of<T,
1592  std::is_void, std::is_pointer, std::is_reference, std::is_const
1593 >;
1594 template <typename T, typename SFINAE = void> struct move_always : std::false_type {};
1595 template <typename T> struct move_always<T, enable_if_t<all_of<
1596  move_is_plain_type<T>,
1598  std::is_move_constructible<T>,
1599  std::is_same<decltype(std::declval<make_caster<T>>().operator T&()), T&>
1600 >::value>> : std::true_type {};
1601 template <typename T, typename SFINAE = void> struct move_if_unreferenced : std::false_type {};
1602 template <typename T> struct move_if_unreferenced<T, enable_if_t<all_of<
1603  move_is_plain_type<T>,
1604  negation<move_always<T>>,
1605  std::is_move_constructible<T>,
1606  std::is_same<decltype(std::declval<make_caster<T>>().operator T&()), T&>
1607 >::value>> : std::true_type {};
1609 
1610 // Detect whether returning a `type` from a cast on type's type_caster is going to result in a
1611 // reference or pointer to a local variable of the type_caster. Basically, only
1612 // non-reference/pointer `type`s and reference/pointers from a type_caster_generic are safe;
1613 // everything else returns a reference/pointer to a local variable.
1614 template <typename type> using cast_is_temporary_value_reference = bool_constant<
1616  !std::is_base_of<type_caster_generic, make_caster<type>>::value &&
1617  !std::is_same<intrinsic_t<type>, void>::value
1618 >;
1619 
1620 // When a value returned from a C++ function is being cast back to Python, we almost always want to
1621 // force `policy = move`, regardless of the return value policy the function/method was declared
1622 // with.
1623 template <typename Return, typename SFINAE = void> struct return_value_policy_override {
1625 };
1626 
1627 template <typename Return> struct return_value_policy_override<Return,
1628  detail::enable_if_t<std::is_base_of<type_caster_generic, make_caster<Return>>::value, void>> {
1633  }
1634 };
1635 
1636 // Basic python -> C++ casting; throws if casting fails
1637 template <typename T, typename SFINAE> type_caster<T, SFINAE> &load_type(type_caster<T, SFINAE> &conv, const handle &handle) {
1638  if (!conv.load(handle, true)) {
1639 #if defined(NDEBUG)
1640  throw cast_error("Unable to cast Python instance to C++ type (compile in debug mode for details)");
1641 #else
1642  throw cast_error("Unable to cast Python instance of type " +
1643  (std::string) str(handle.get_type()) + " to C++ type '" + type_id<T>() + "'");
1644 #endif
1645  }
1646  return conv;
1647 }
1648 // Wrapper around the above that also constructs and returns a type_caster
1649 template <typename T> make_caster<T> load_type(const handle &handle) {
1650  make_caster<T> conv;
1651  load_type(conv, handle);
1652  return conv;
1653 }
1654 
1655 NAMESPACE_END(detail)
1656 
1657 // pytype -> C++ type
1659 T cast(const handle &handle) {
1660  using namespace detail;
1662  "Unable to cast type to reference: value is local to type caster");
1663  return cast_op<T>(load_type<T>(handle));
1664 }
1665 
1666 // pytype -> pytype (calls converting constructor)
1668 T cast(const handle &handle) { return T(reinterpret_borrow<object>(handle)); }
1669 
1670 // C++ type -> py::object
1672 object cast(const T &value, return_value_policy policy = return_value_policy::automatic_reference,
1673  handle parent = handle()) {
1674  if (policy == return_value_policy::automatic)
1675  policy = std::is_pointer<T>::value ? return_value_policy::take_ownership : return_value_policy::copy;
1676  else if (policy == return_value_policy::automatic_reference)
1677  policy = std::is_pointer<T>::value ? return_value_policy::reference : return_value_policy::copy;
1678  return reinterpret_steal<object>(detail::make_caster<T>::cast(value, policy, parent));
1679 }
1680 
1681 template <typename T> T handle::cast() const { return pybind11::cast<T>(*this); }
1682 template <> inline void handle::cast() const { return; }
1683 
1684 template <typename T>
1686  if (obj.ref_count() > 1)
1687 #if defined(NDEBUG)
1688  throw cast_error("Unable to cast Python instance to C++ rvalue: instance has multiple references"
1689  " (compile in debug mode for details)");
1690 #else
1691  throw cast_error("Unable to move from Python " + (std::string) str(obj.get_type()) +
1692  " instance to C++ " + type_id<T>() + " instance: instance has multiple references");
1693 #endif
1694 
1695  // Move into a temporary and return that, because the reference may be a local value of `conv`
1696  T ret = std::move(detail::load_type<T>(obj).operator T&());
1697  return ret;
1698 }
1699 
1700 // Calling cast() on an rvalue calls pybind::cast with the object rvalue, which does:
1701 // - If we have to move (because T has no copy constructor), do it. This will fail if the moved
1702 // object has multiple references, but trying to copy will fail to compile.
1703 // - If both movable and copyable, check ref count: if 1, move; otherwise copy
1704 // - Otherwise (not movable), copy.
1705 template <typename T> detail::enable_if_t<detail::move_always<T>::value, T> cast(object &&object) {
1706  return move<T>(std::move(object));
1707 }
1708 template <typename T> detail::enable_if_t<detail::move_if_unreferenced<T>::value, T> cast(object &&object) {
1709  if (object.ref_count() > 1)
1710  return cast<T>(object);
1711  else
1712  return move<T>(std::move(object));
1713 }
1714 template <typename T> detail::enable_if_t<detail::move_never<T>::value, T> cast(object &&object) {
1715  return cast<T>(object);
1716 }
1717 
1718 template <typename T> T object::cast() const & { return pybind11::cast<T>(*this); }
1719 template <typename T> T object::cast() && { return pybind11::cast<T>(std::move(*this)); }
1720 template <> inline void object::cast() const & { return; }
1721 template <> inline void object::cast() && { return; }
1722 
1723 NAMESPACE_BEGIN(detail)
1724 
1725 // Declared in pytypes.h:
1727 object object_or_cast(T &&o) { return pybind11::cast(std::forward<T>(o)); }
1728 
1729 struct overload_unused {}; // Placeholder type for the unneeded (and dead code) static variable in the OVERLOAD_INT macro
1730 template <typename ret_type> using overload_caster_t = conditional_t<
1732 
1733 // Trampoline use: for reference/pointer types to value-converted values, we do a value cast, then
1734 // store the result in the given variable. For other types, this is a no-op.
1736  return cast_op<T>(load_type(caster, o));
1737 }
1738 template <typename T> enable_if_t<!cast_is_temporary_value_reference<T>::value, T> cast_ref(object &&, overload_unused &) {
1739  pybind11_fail("Internal error: cast_ref fallback invoked"); }
1740 
1741 // Trampoline use: Having a pybind11::cast with an invalid reference type is going to static_assert, even
1742 // though if it's in dead code, so we provide a "trampoline" to pybind11::cast that only does anything in
1743 // cases where pybind11::cast is valid.
1745  return pybind11::cast<T>(std::move(o)); }
1747  pybind11_fail("Internal error: cast_safe fallback invoked"); }
1748 template <> inline void cast_safe<void>(object &&) {}
1749 
1750 NAMESPACE_END(detail)
1751 
1752 template <return_value_policy policy = return_value_policy::automatic_reference>
1753 tuple make_tuple() { return tuple(0); }
1754 
1755 template <return_value_policy policy = return_value_policy::automatic_reference,
1756  typename... Args> tuple make_tuple(Args&&... args_) {
1757  constexpr size_t size = sizeof...(Args);
1758  std::array<object, size> args {
1759  { reinterpret_steal<object>(detail::make_caster<Args>::cast(
1760  std::forward<Args>(args_), policy, nullptr))... }
1761  };
1762  for (size_t i = 0; i < args.size(); i++) {
1763  if (!args[i]) {
1764 #if defined(NDEBUG)
1765  throw cast_error("make_tuple(): unable to convert arguments to Python object (compile in debug mode for details)");
1766 #else
1767  std::array<std::string, size> argtypes { {type_id<Args>()...} };
1768  throw cast_error("make_tuple(): unable to convert argument of type '" +
1769  argtypes[i] + "' to Python object");
1770 #endif
1771  }
1772  }
1773  tuple result(size);
1774  int counter = 0;
1775  for (auto &arg_value : args)
1776  PyTuple_SET_ITEM(result.ptr(), counter++, arg_value.release().ptr());
1777  return result;
1778 }
1779 
1782 struct arg {
1784  constexpr explicit arg(const char *name = nullptr) : name(name), flag_noconvert(false), flag_none(true) { }
1786  template <typename T> arg_v operator=(T &&value) const;
1788  arg &noconvert(bool flag = true) { flag_noconvert = flag; return *this; }
1790  arg &none(bool flag = true) { flag_none = flag; return *this; }
1791 
1792  const char *name;
1793  bool flag_noconvert : 1;
1794  bool flag_none : 1;
1795 };
1796 
1799 struct arg_v : arg {
1800 private:
1801  template <typename T>
1802  arg_v(arg &&base, T &&x, const char *descr = nullptr)
1803  : arg(base),
1804  value(reinterpret_steal<object>(
1805  detail::make_caster<T>::cast(x, return_value_policy::automatic, {})
1806  )),
1807  descr(descr)
1808 #if !defined(NDEBUG)
1809  , type(type_id<T>())
1810 #endif
1811  { }
1812 
1813 public:
1815  template <typename T>
1816  arg_v(const char *name, T &&x, const char *descr = nullptr)
1817  : arg_v(arg(name), std::forward<T>(x), descr) { }
1818 
1820  template <typename T>
1821  arg_v(const arg &base, T &&x, const char *descr = nullptr)
1822  : arg_v(arg(base), std::forward<T>(x), descr) { }
1823 
1825  arg_v &noconvert(bool flag = true) { arg::noconvert(flag); return *this; }
1826 
1828  arg_v &none(bool flag = true) { arg::none(flag); return *this; }
1829 
1831  object value;
1833  const char *descr;
1834 #if !defined(NDEBUG)
1835  std::string type;
1837 #endif
1838 };
1839 
1840 template <typename T>
1841 arg_v arg::operator=(T &&value) const { return {std::move(*this), std::forward<T>(value)}; }
1842 
1844 template <typename /*unused*/> using arg_t = arg_v;
1845 
1846 inline namespace literals {
1850 constexpr arg operator"" _a(const char *name, size_t) { return arg(name); }
1851 }
1852 
1853 NAMESPACE_BEGIN(detail)
1854 
1855 // forward declaration (definition in attr.h)
1856 struct function_record;
1857 
1860  function_call(const function_record &f, handle p); // Implementation in attr.h
1861 
1864 
1866  std::vector<handle> args;
1867 
1869  std::vector<bool> args_convert;
1870 
1873  object args_ref, kwargs_ref;
1874 
1876  handle parent;
1877 
1879  handle init_self;
1880 };
1881 
1882 
1884 template <typename... Args>
1886  using indices = make_index_sequence<sizeof...(Args)>;
1887 
1888  template <typename Arg> using argument_is_args = std::is_same<intrinsic_t<Arg>, args>;
1889  template <typename Arg> using argument_is_kwargs = std::is_same<intrinsic_t<Arg>, kwargs>;
1890  // Get args/kwargs argument positions relative to the end of the argument list:
1891  static constexpr auto args_pos = constexpr_first<argument_is_args, Args...>() - (int) sizeof...(Args),
1892  kwargs_pos = constexpr_first<argument_is_kwargs, Args...>() - (int) sizeof...(Args);
1893 
1894  static constexpr bool args_kwargs_are_last = kwargs_pos >= - 1 && args_pos >= kwargs_pos - 1;
1895 
1896  static_assert(args_kwargs_are_last, "py::args/py::kwargs are only permitted as the last argument(s) of a function");
1897 
1898 public:
1899  static constexpr bool has_kwargs = kwargs_pos < 0;
1900  static constexpr bool has_args = args_pos < 0;
1901 
1902  static constexpr auto arg_names = concat(type_descr(make_caster<Args>::name)...);
1903 
1905  return load_impl_sequence(call, indices{});
1906  }
1907 
1908  template <typename Return, typename Guard, typename Func>
1910  return std::move(*this).template call_impl<Return>(std::forward<Func>(f), indices{}, Guard{});
1911  }
1912 
1913  template <typename Return, typename Guard, typename Func>
1915  std::move(*this).template call_impl<Return>(std::forward<Func>(f), indices{}, Guard{});
1916  return void_type();
1917  }
1918 
1919 private:
1920 
1921  static bool load_impl_sequence(function_call &, index_sequence<>) { return true; }
1922 
1923  template <size_t... Is>
1925  for (bool r : {std::get<Is>(argcasters).load(call.args[Is], call.args_convert[Is])...})
1926  if (!r)
1927  return false;
1928  return true;
1929  }
1930 
1931  template <typename Return, typename Func, size_t... Is, typename Guard>
1932  Return call_impl(Func &&f, index_sequence<Is...>, Guard &&) {
1933  return std::forward<Func>(f)(cast_op<Args>(std::move(std::get<Is>(argcasters)))...);
1934  }
1935 
1936  std::tuple<make_caster<Args>...> argcasters;
1937 };
1938 
1941 template <return_value_policy policy>
1943 public:
1944  template <typename... Ts>
1945  explicit simple_collector(Ts &&...values)
1946  : m_args(pybind11::make_tuple<policy>(std::forward<Ts>(values)...)) { }
1947 
1948  const tuple &args() const & { return m_args; }
1949  dict kwargs() const { return {}; }
1950 
1951  tuple args() && { return std::move(m_args); }
1952 
1954  object call(PyObject *ptr) const {
1955  PyObject *result = PyObject_CallObject(ptr, m_args.ptr());
1956  if (!result)
1957  throw error_already_set();
1958  return reinterpret_steal<object>(result);
1959  }
1960 
1961 private:
1963 };
1964 
1966 template <return_value_policy policy>
1968 public:
1969  template <typename... Ts>
1970  explicit unpacking_collector(Ts &&...values) {
1971  // Tuples aren't (easily) resizable so a list is needed for collection,
1972  // but the actual function call strictly requires a tuple.
1973  auto args_list = list();
1974  int _[] = { 0, (process(args_list, std::forward<Ts>(values)), 0)... };
1975  ignore_unused(_);
1976 
1977  m_args = std::move(args_list);
1978  }
1979 
1980  const tuple &args() const & { return m_args; }
1981  const dict &kwargs() const & { return m_kwargs; }
1982 
1983  tuple args() && { return std::move(m_args); }
1984  dict kwargs() && { return std::move(m_kwargs); }
1985 
1987  object call(PyObject *ptr) const {
1988  PyObject *result = PyObject_Call(ptr, m_args.ptr(), m_kwargs.ptr());
1989  if (!result)
1990  throw error_already_set();
1991  return reinterpret_steal<object>(result);
1992  }
1993 
1994 private:
1995  template <typename T>
1996  void process(list &args_list, T &&x) {
1997  auto o = reinterpret_steal<object>(detail::make_caster<T>::cast(std::forward<T>(x), policy, {}));
1998  if (!o) {
1999 #if defined(NDEBUG)
2000  argument_cast_error();
2001 #else
2002  argument_cast_error(std::to_string(args_list.size()), type_id<T>());
2003 #endif
2004  }
2005  args_list.append(o);
2006  }
2007 
2008  void process(list &args_list, detail::args_proxy ap) {
2009  for (const auto &a : ap)
2010  args_list.append(a);
2011  }
2012 
2013  void process(list &/*args_list*/, arg_v a) {
2014  if (!a.name)
2015 #if defined(NDEBUG)
2016  nameless_argument_error();
2017 #else
2018  nameless_argument_error(a.type);
2019 #endif
2020 
2021  if (m_kwargs.contains(a.name)) {
2022 #if defined(NDEBUG)
2023  multiple_values_error();
2024 #else
2025  multiple_values_error(a.name);
2026 #endif
2027  }
2028  if (!a.value) {
2029 #if defined(NDEBUG)
2030  argument_cast_error();
2031 #else
2032  argument_cast_error(a.name, a.type);
2033 #endif
2034  }
2035  m_kwargs[a.name] = a.value;
2036  }
2037 
2038  void process(list &/*args_list*/, detail::kwargs_proxy kp) {
2039  if (!kp)
2040  return;
2041  for (const auto &k : reinterpret_borrow<dict>(kp)) {
2042  if (m_kwargs.contains(k.first)) {
2043 #if defined(NDEBUG)
2044  multiple_values_error();
2045 #else
2046  multiple_values_error(str(k.first));
2047 #endif
2048  }
2049  m_kwargs[k.first] = k.second;
2050  }
2051  }
2052 
2053  [[noreturn]] static void nameless_argument_error() {
2054  throw type_error("Got kwargs without a name; only named arguments "
2055  "may be passed via py::arg() to a python function call. "
2056  "(compile in debug mode for details)");
2057  }
2058  [[noreturn]] static void nameless_argument_error(std::string type) {
2059  throw type_error("Got kwargs without a name of type '" + type + "'; only named "
2060  "arguments may be passed via py::arg() to a python function call. ");
2061  }
2062  [[noreturn]] static void multiple_values_error() {
2063  throw type_error("Got multiple values for keyword argument "
2064  "(compile in debug mode for details)");
2065  }
2066 
2067  [[noreturn]] static void multiple_values_error(std::string name) {
2068  throw type_error("Got multiple values for keyword argument '" + name + "'");
2069  }
2070 
2071  [[noreturn]] static void argument_cast_error() {
2072  throw cast_error("Unable to convert call argument to Python object "
2073  "(compile in debug mode for details)");
2074  }
2075 
2076  [[noreturn]] static void argument_cast_error(std::string name, std::string type) {
2077  throw cast_error("Unable to convert call argument '" + name
2078  + "' of type '" + type + "' to Python object");
2079  }
2080 
2081 private:
2084 };
2085 
2087 template <return_value_policy policy, typename... Args,
2088  typename = enable_if_t<all_of<is_positional<Args>...>::value>>
2090  return simple_collector<policy>(std::forward<Args>(args)...);
2091 }
2092 
2094 template <return_value_policy policy, typename... Args,
2095  typename = enable_if_t<!all_of<is_positional<Args>...>::value>>
2097  // Following argument order rules for generalized unpacking according to PEP 448
2098  static_assert(
2099  constexpr_last<is_positional, Args...>() < constexpr_first<is_keyword_or_ds, Args...>()
2100  && constexpr_last<is_s_unpacking, Args...>() < constexpr_first<is_ds_unpacking, Args...>(),
2101  "Invalid function call: positional args must precede keywords and ** unpacking; "
2102  "* unpacking must precede ** unpacking"
2103  );
2104  return unpacking_collector<policy>(std::forward<Args>(args)...);
2105 }
2106 
2107 template <typename Derived>
2108 template <return_value_policy policy, typename... Args>
2109 object object_api<Derived>::operator()(Args &&...args) const {
2110  return detail::collect_arguments<policy>(std::forward<Args>(args)...).call(derived().ptr());
2111 }
2112 
2113 template <typename Derived>
2114 template <return_value_policy policy, typename... Args>
2115 object object_api<Derived>::call(Args &&...args) const {
2116  return operator()<policy>(std::forward<Args>(args)...);
2117 }
2118 
2119 NAMESPACE_END(detail)
2120 
2121 #define PYBIND11_MAKE_OPAQUE(...) \
2122  namespace pybind11 { namespace detail { \
2123  template<> class type_caster<__VA_ARGS__> : public type_caster_base<__VA_ARGS__> { }; \
2124  }}
2125 
2128 #define PYBIND11_TYPE(...) __VA_ARGS__
2129 
bool load_bytes(enable_if_t< sizeof(C) !=1, handle >)
Definition: cast.h:1258
nonsimple_values_and_holders nonsimple
static handle cast(const handle &src, return_value_policy, handle)
Definition: cast.h:1573
enable_if_t<!std::is_void< Return >::value, Return > call(Func &&f) &&
Definition: cast.h:1909
type implicit_cast(index_sequence< Is... >) &
Definition: cast.h:1388
type implicit_cast(index_sequence< Is... >) &&
Definition: cast.h:1390
static handle cast(bool src, return_value_policy, handle)
Definition: cast.h:1152
handle get_type() const
Return a handle to the Python type object underlying the instance.
Definition: pytypes.h:1430
std::vector< handle > args
Arguments passed to the function:
Definition: cast.h:1866
T reinterpret_steal(handle h)
Definition: pytypes.h:312
#define PYBIND11_NB_BOOL(ptr)
void * simple_value_holder[1+instance_simple_holder_in_ptrs()]
static std::enable_if<!std::is_floating_point< U >::value &&std::is_signed< U >::value &&(sizeof(U)<=sizeof(long)), handle >::type cast(U src, return_value_policy, handle)
Definition: cast.h:1033
#define PYBIND11_NAMESPACE
Definition: detail/common.h:26
bool try_implicit_casts(handle src, bool convert)
Definition: cast.h:1493
static return_value_policy policy(return_value_policy p)
Definition: cast.h:1624
PyObject * ptr() const
Return the underlying PyObject * pointer.
Definition: pytypes.h:182
std::size_t size_t
object getattr(handle obj, handle name)
Definition: pytypes.h:403
static handle cast_impl(T &&src, return_value_policy policy, handle parent, index_sequence< Is... >)
Definition: cast.h:1404
static std::enable_if<!std::is_floating_point< U >::value &&std::is_unsigned< U >::value &&(sizeof(U) > sizeof(unsigned long)), handle >::type cast(U src, return_value_policy, handle)
Definition: cast.h:1051
static auto make_move_constructor(const T *x) -> decltype(new T(std::move(*const_cast< T *>(x))), Constructor
Definition: cast.h:899
static handle cast(const StringType &src, return_value_policy, handle)
Definition: cast.h:1213
static auto make_copy_constructor(const T *x) -> decltype(new T(*x), Constructor
Definition: cast.h:892
#define PYBIND11_BOOL_ATTR
bool load(handle src, bool)
Definition: cast.h:1172
enable_if_t< std::is_void< Return >::value, void_type > call(Func &&f) &&
Definition: cast.h:1914
bool flag_noconvert
If set, do not allow conversion (requires a supporting type caster!)
Definition: cast.h:1793
Helper class which collects positional, keyword, * and ** arguments for a Python function call...
Definition: cast.h:1967
RAII wrapper that temporarily clears any Python error state.
static void nameless_argument_error()
Definition: cast.h:2053
const char * name
If non-null, this is a named kwargs argument.
Definition: cast.h:1792
bool load_impl(const sequence &seq, bool convert, index_sequence< Is... >)
Definition: cast.h:1395
std::is_base_of< pyobject_tag, remove_reference_t< T > > is_pyobject
Definition: pytypes.h:47
bool load(handle src, bool)
Definition: cast.h:1563
std::string error_string()
glibc defines I as a macro which breaks things, e.g., boost template names
Definition: attr.h:15
negation< all_of< negation< Ts >... > > any_of
detail::type_info * get_local_type_info(const std::type_index &tp)
Definition: cast.h:169
void add_patient(PyObject *nurse, PyObject *patient)
Definition: class.h:290
std::string type
The C++ type name of the default value (only available when compiled in debug mode) ...
Definition: cast.h:1836
detail::enable_if_t< detail::move_never< T >::value, T > cast(object &&object)
Definition: cast.h:1714
static constexpr size_t size_in_ptrs(size_t s)
bool operator!=(const iterator &other)
Definition: cast.h:288
std::vector< detail::type_info * > type_vec
Definition: cast.h:265
void set_holder_constructed(bool v=true)
Definition: cast.h:238
STL namespace.
std::is_same< bools< Ts::value..., true >, bools< true, Ts::value... > > all_of
bool load(handle src, bool convert)
Definition: cast.h:1120
type_caster_base(const std::type_info &info)
Definition: cast.h:831
constexpr descr< N+2, Ts... > type_descr(const descr< N, Ts... > &descr)
Definition: descr.h:95
PyThreadState * get_thread_state_unchecked()
Definition: cast.h:465
static void nameless_argument_error(std::string type)
Definition: cast.h:2058
bool holder_constructed() const
Definition: cast.h:233
make_index_sequence< sizeof...(Args)> indices
Definition: cast.h:1886
object object_or_cast(T &&o)
Definition: cast.h:1727
static constexpr bool load_impl(const sequence &, bool, index_sequence<>)
Definition: cast.h:1392
type_map< type_info * > & registered_local_types_cpp()
Works like internals.registered_types_cpp, but for module-local registered types: ...
Definition: internals.h:261
return_value_policy handle const detail::type_info void *(*) void *(*) const void const type_info src_and_type)(const void *src, const std::type_info &cast_type, const std::type_info *rtti_type=nullptr)
Definition: cast.h:723
bool load_bytes(enable_if_t< sizeof(C)==1, handle > src)
Definition: cast.h:1243
arg_v(const char *name, T &&x, const char *descr=nullptr)
Direct construction with name, default, and description.
Definition: cast.h:1816
handle parent
The parent, if any.
Definition: cast.h:1876
Internal data structure which holds metadata about a bound function (signature, overloads, etc.)
Definition: attr.h:134
detail::type_info * get_global_type_info(const std::type_index &tp)
Definition: cast.h:177
const std::vector< detail::type_info * > & all_type_info(PyTypeObject *type)
Definition: cast.h:146
Internal data associated with a single function call.
Definition: cast.h:1859
constexpr descr< N - 1 > _(char const(&text)[N])
Definition: descr.h:54
def msg()
Definition: conftest.py:165
iterator(instance *inst, const type_vec *tinfo)
Definition: cast.h:277
handle init_self
If this is a call to an initializer, this argument contains self
Definition: cast.h:1879
std::is_same< intrinsic_t< Arg >, args > argument_is_args
Definition: cast.h:1888
const tuple & args() const &
Definition: cast.h:1980
void process(list &args_list, detail::args_proxy ap)
Definition: cast.h:2008
#define PYBIND11_NOINLINE
Definition: detail/common.h:86
void(* init_instance)(instance *, const void *)
Definition: internals.h:121
static handle cast_holder(const itype *src, const void *holder)
Definition: cast.h:874
The &#39;instance&#39; type which needs to be standard layout (need to be able to use &#39;offsetof&#39;) ...
detail::cast_op_type< T > cast_op_type
Definition: cast.h:881
Return call_impl(Func &&f, index_sequence< Is... >, Guard &&)
Definition: cast.h:1932
#define PYBIND11_LONG_FROM_SIGNED(o)
PyObject * make_new_instance(PyTypeObject *type)
Definition: class.h:250
typename std::enable_if< B, T >::type enable_if_t
Definition: CLI11.hpp:918
conditional_t< std::is_pointer< remove_reference_t< T > >::value, typename std::add_pointer< intrinsic_t< T > >::type, typename std::add_lvalue_reference< intrinsic_t< T > >::type > cast_op_type
Definition: cast.h:752
static handle cast(const void *ptr, return_value_policy, handle)
Definition: cast.h:1102
bool same_type(const std::type_info &lhs, const std::type_info &rhs)
Definition: internals.h:59
object call(PyObject *ptr) const
Call a Python function and pass the collected arguments.
Definition: cast.h:1954
static Constructor make_move_constructor(...)
Definition: cast.h:906
std::vector< type_info * > & bases
Definition: cast.h:91
loader_life_support()
A new patient frame is created when a function is entered.
Definition: cast.h:43
static handle cast(T, return_value_policy, handle)
Definition: cast.h:1065
bool is_none() const
Equivalent to obj is None in Python.
Definition: pytypes.h:116
arg_v & none(bool flag=true)
Same as arg::nonone(), but returns *this as arg_v&, not arg&.
Definition: cast.h:1828
bool load(handle h, bool)
Definition: cast.h:1077
size_t function_call handle ret
Definition: pybind11.h:1610
bool simple_holder_constructed
For simple layout, tracks whether the holder has been constructed.
bool isinstance_generic(handle obj, const std::type_info &tp)
~loader_life_support()
... and destroyed after it returns
Definition: cast.h:48
static handle decode_utfN(const char *buffer, ssize_t nbytes)
Definition: cast.h:1224
void process(list &, arg_v a)
Definition: cast.h:2013
static bool try_direct_conversions(handle)
Definition: cast.h:1505
bool load(handle src, bool convert)
Definition: cast.h:1446
bool load(handle src, bool convert)
Definition: cast.h:1365
static handle cast(const itype *src, return_value_policy policy, handle parent)
Definition: cast.h:867
#define NAMESPACE_END(name)
Definition: detail/common.h:16
void process(list &args_list, T &&x)
Definition: cast.h:1996
const char * descr
The (optional) description of the default value.
Definition: cast.h:1833
value_and_holder(size_t index)
Definition: cast.h:222
auto const & type_dict
Definition: cast.h:96
return isinstance(obj, type)
const std::type_info * cpptype
Definition: internals.h:118
const detail::type_info * type
Definition: cast.h:209
static bool load_impl_sequence(function_call &, index_sequence<>)
Definition: cast.h:1921
make_caster< T > load_type(const handle &handle)
Definition: cast.h:1649
static void multiple_values_error(std::string name)
Definition: cast.h:2067
typename intrinsic_type< T >::type intrinsic_t
return_value_policy
Approach used to cast a previously unknown C++ instance into a Python object.
void *(*)(const void *) Constructor
Definition: cast.h:887
typename std::basic_string< CharT, Traits, Allocator > ::value_type CharT
Definition: cast.h:1160
object value
The default value.
Definition: cast.h:1831
bool owned
If true, the pointer is owned which means we&#39;re free to manage it with a holder.
size_t function_call & call
Definition: pybind11.h:1610
enable_if_t< cast_is_temporary_value_reference< T >::value, T > cast_safe(object &&)
Definition: cast.h:1746
static handle cast(holder_type &&src, return_value_policy, handle)
Definition: cast.h:1520
typename make_index_sequence_impl< N >::type make_index_sequence
#define PYBIND11_BYTES_NAME
bool_constant<(std::is_reference< type >::value||std::is_pointer< type >::value) &&!std::is_base_of< type_caster_generic, make_caster< type > >::value &&!std::is_same< intrinsic_t< type >, void >::value > cast_is_temporary_value_reference
Definition: cast.h:1618
static handle cast(itype &&src, return_value_policy, handle parent)
Definition: cast.h:839
static void argument_cast_error(std::string name, std::string type)
Definition: cast.h:2076
static std::enable_if<!std::is_floating_point< U >::value &&std::is_signed< U >::value &&(sizeof(U) > sizeof(long)), handle >::type cast(U src, return_value_policy, handle)
Definition: cast.h:1045
static std::enable_if< std::is_floating_point< U >::value, handle >::type cast(U src, return_value_policy, handle)
Definition: cast.h:1027
tuple make_tuple(Args &&... args_)
Definition: cast.h:1756
void cast_safe< void >(object &&)
Definition: cast.h:1748
arg_v(const arg &base, T &&x, const char *descr=nullptr)
Called internally when invoking py::arg("a") = value
Definition: cast.h:1821
std::tuple< make_caster< Args >... > argcasters
Definition: cast.h:1936
void *(* module_local_load)(PyObject *, const type_info *)
Definition: internals.h:128
bool load_impl_sequence(function_call &call, index_sequence< Is... >)
Definition: cast.h:1924
Generic type caster for objects stored on the heap.
Definition: cast.h:824
std::pair< decltype(internals::registered_types_py)::iterator, bool > all_type_info_get_cache(PyTypeObject *type)
Definition: pybind11.h:1624
#define PYBIND11_MODULE_LOCAL_ID
Definition: internals.h:166
typename caster_t::template cast_op_type< type > subcaster_cast_op_type
Definition: cast.h:926
typename std::conditional< B, T, F >::type conditional_t
arg & none(bool flag=true)
Indicates that the argument should/shouldn&#39;t allow None (e.g. for nullable pointer args) ...
Definition: cast.h:1790
static Constructor make_copy_constructor(...)
Definition: cast.h:905
const std::type_info & tp
Definition: cast.h:399
constexpr int constexpr_first()
const dict & kwargs() const &
Definition: cast.h:1981
#define PYBIND11_BYTES_CHECK
static handle cast(T &&src, return_value_policy policy, handle parent)
Definition: cast.h:1375
simple_collector(Ts &&...values)
Definition: cast.h:1945
conditional_t< std::is_pointer< typename std::remove_reference< T >::type >::value, typename std::add_pointer< intrinsic_t< T > >::type, conditional_t< std::is_rvalue_reference< T >::value, typename std::add_rvalue_reference< intrinsic_t< T > >::type, typename std::add_lvalue_reference< intrinsic_t< T > >::type > > movable_cast_op_type
Definition: cast.h:767
static handle cast(CharT src, return_value_policy policy, handle parent)
Definition: cast.h:1296
bool operator==(const iterator &other)
Definition: cast.h:287
const function_record & func
The function data:
Definition: cast.h:1863
value_and_holder(instance *i, const detail::type_info *type, size_t vpos, size_t index)
Definition: cast.h:213
std::integral_constant< bool, B > bool_constant
Backports of std::bool_constant and std::negation to accommodate older compilers. ...
const tuple & args() const &
Definition: cast.h:1948
Annotation indicating that a class derives from another given type.
Definition: attr.h:39
const detail::type_info * type
Definition: cast.h:453
Annotation for function names.
Definition: attr.h:33
void set_instance_registered(bool v=true)
Definition: cast.h:251
#define PYBIND11_LONG_FROM_UNSIGNED(o)
arg_v(arg &&base, T &&x, const char *descr=nullptr)
Definition: cast.h:1802
const char * c_str(Args &&...args)
Definition: internals.h:271
enable_if_t<!cast_is_temporary_value_reference< T >::value, T > cast_ref(object &&, overload_unused &)
Definition: cast.h:1738
std::vector< bool > args_convert
The convert value the arguments should be loaded with.
Definition: cast.h:1869
detail::enable_if_t<!detail::move_never< T >::value, T > move(object &&obj)
Definition: cast.h:1685
Tuple< make_caster< Ts >... > subcasters
Definition: cast.h:1418
handle release()
Definition: pytypes.h:247
conditional_t< std::is_floating_point< T >::value, double, _py_type_1 > py_type
Definition: cast.h:973
Helper type to replace &#39;void&#39; in some expressions.
static handle cast(const holder_type &src, return_value_policy, handle)
Definition: cast.h:1462
return os str()
unpacking_collector< policy > collect_arguments(Args &&...args)
Collect all arguments, including keywords and unpacking (only instantiated when needed) ...
Definition: cast.h:2096
conditional_t< is_copy_constructible< holder_type >::value, copyable_holder_caster< type, holder_type >, move_only_holder_caster< type, holder_type > > type_caster_holder
Definition: cast.h:1534
std::is_same< intrinsic_t< Arg >, kwargs > argument_is_kwargs
Definition: cast.h:1889
conditional_t< std::is_signed< T >::value, _py_type_0, typename std::make_unsigned< _py_type_0 >::type > _py_type_1
Definition: cast.h:972
object call(PyObject *ptr) const
Call a Python function and pass the collected arguments.
Definition: cast.h:1987
#define PYBIND11_STRING_NAME
void ignore_unused(const int *)
Ignore that a variable is unused in compiler warnings.
Helper class which loads arguments for C++ functions called from Python.
Definition: cast.h:1885
unpacking_collector(Ts &&...values)
Definition: cast.h:1970
any_of< std::is_same< CharT, char >, std::is_same< CharT, char16_t >, std::is_same< CharT, char32_t >, std::is_same< CharT, wchar_t > > is_std_char_type
Definition: cast.h:967
constexpr size_t instance_simple_holder_in_ptrs()
arg & noconvert(bool flag=true)
Indicate that the type should not be converted in the type caster.
Definition: cast.h:1788
bool try_implicit_casts(handle, bool)
Definition: cast.h:1490
Type caster for holder types like std::shared_ptr, etc.
Definition: cast.h:1436
type_caster_generic(const type_info *typeinfo)
Definition: cast.h:488
#define PYBIND11_BYTES_AS_STRING
#define NAMESPACE_BEGIN(name)
Definition: detail/common.h:13
Thrown when pybind11::cast or handle::call fail due to a type casting error.
make_caster< T >::template cast_op_type< typename std::add_rvalue_reference< T >::type > cast_op(make_caster< T > &&caster)
Definition: cast.h:917
T cast(const handle &handle)
Definition: cast.h:1659
static handle cast(const std::reference_wrapper< type > &src, return_value_policy policy, handle parent)
Definition: cast.h:932
arg_v & noconvert(bool flag=true)
Same as arg::noconvert(), but returns *this as arg_v&, not arg&.
Definition: cast.h:1825
conditional_t< cast_is_temporary_value_reference< ret_type >::value, make_caster< ret_type >, overload_unused > overload_caster_t
Definition: cast.h:1731
bool load(handle src, bool convert)
Definition: cast.h:491
static std::enable_if<!std::is_floating_point< U >::value &&std::is_unsigned< U >::value &&(sizeof(U)<=sizeof(unsigned long)), handle >::type cast(U src, return_value_policy, handle)
Definition: cast.h:1039
#define PYBIND11_BYTES_SIZE
bool simple_instance_registered
For simple layout, tracks whether the instance is registered in registered_instances ...
auto range
Definition: cast.h:455
static std::pair< const void *, const type_info * > src_and_type(const itype *src)
Definition: cast.h:846
type_caster< intrinsic_t< type > > make_caster
Definition: cast.h:910
bool load(handle src, bool)
Definition: cast.h:1060
iterator find(const type_info *find_type)
Definition: cast.h:303
constexpr arg(const char *name=nullptr)
Constructs an argument with the name of the argument; if null or omitted, this is a positional argume...
Definition: cast.h:1784
static handle cast(const CharT *src, return_value_policy policy, handle parent)
Definition: cast.h:1291
static auto get(const T &p) -> decltype(p.get())
Definition: cast.h:1431
static handle cast(const itype &src, return_value_policy policy, handle parent)
Definition: cast.h:833
bool load_value(value_and_holder &&v_h)
Definition: cast.h:1474
bool load_args(function_call &call)
Definition: cast.h:1904
void process(list &, detail::kwargs_proxy kp)
Definition: cast.h:2038
const std::type_info & tinfo
Definition: numpy.h:1091
#define PYBIND11_TYPE_CASTER(type, py_name)
Definition: cast.h:942
bool flag_none
If set (the default), allow None to be passed to this argument.
Definition: cast.h:1794
typename std::enable_if< B, T >::type enable_if_t
from cpp_future import (convenient aliases from C++14/17)
const handle & inc_ref() const &
Definition: pytypes.h:190
auto to_string(T &&value) -> decltype(std::forward< T >(value))
Convert an object to a string (directly forward if this can become a string)
Definition: CLI11.hpp:1028
void keep_alive_impl(handle nurse, handle patient)
Definition: pybind11.h:1583
bool hasattr(handle obj, handle name)
Definition: pytypes.h:387
Py_ssize_t ssize_t
values_and_holders(instance *inst)
Definition: cast.h:269
constexpr descr< 0 > concat()
Definition: descr.h:83
bool instance_registered() const
Definition: cast.h:246
#define PYBIND11_LONG_AS_LONGLONG(o)