1/* 2 pybind11/detail/common.h -- Basic macros 3 4 Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch> 5 6 All rights reserved. Use of this source code is governed by a 7 BSD-style license that can be found in the LICENSE file. 8*/ 9 10#pragma once 11 12#if !defined(NAMESPACE_BEGIN) 13# define NAMESPACE_BEGIN(name) namespace name { 14#endif 15#if !defined(NAMESPACE_END) 16# define NAMESPACE_END(name) } 17#endif 18 19// Robust support for some features and loading modules compiled against different pybind versions 20// requires forcing hidden visibility on pybind code, so we enforce this by setting the attribute on 21// the main `pybind11` namespace. 22#if !defined(PYBIND11_NAMESPACE) 23# ifdef __GNUG__ 24# define PYBIND11_NAMESPACE pybind11 __attribute__((visibility("hidden"))) 25# else 26# define PYBIND11_NAMESPACE pybind11 27# endif 28#endif 29 30#if !(defined(_MSC_VER) && __cplusplus == 199711L) && !defined(__INTEL_COMPILER) 31# if __cplusplus >= 201402L 32# define PYBIND11_CPP14 33# if __cplusplus >= 201703L 34# define PYBIND11_CPP17 35# endif 36# endif 37#elif defined(_MSC_VER) && __cplusplus == 199711L 38// MSVC sets _MSVC_LANG rather than __cplusplus (supposedly until the standard is fully implemented) 39// Unless you use the /Zc:__cplusplus flag on Visual Studio 2017 15.7 Preview 3 or newer 40# if _MSVC_LANG >= 201402L 41# define PYBIND11_CPP14 42# if _MSVC_LANG > 201402L && _MSC_VER >= 1910 43# define PYBIND11_CPP17 44# endif 45# endif 46#endif 47 48// Compiler version assertions 49#if defined(__INTEL_COMPILER) 50# if __INTEL_COMPILER < 1700 51# error pybind11 requires Intel C++ compiler v17 or newer 52# endif 53#elif defined(__clang__) && !defined(__apple_build_version__) 54# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 3) 55# error pybind11 requires clang 3.3 or newer 56# endif 57#elif defined(__clang__) 58// Apple changes clang version macros to its Xcode version; the first Xcode release based on 59// (upstream) clang 3.3 was Xcode 5: 60# if __clang_major__ < 5 61# error pybind11 requires Xcode/clang 5.0 or newer 62# endif 63#elif defined(__GNUG__) 64# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) 65# error pybind11 requires gcc 4.8 or newer 66# endif 67#elif defined(_MSC_VER) 68// Pybind hits various compiler bugs in 2015u2 and earlier, and also makes use of some stl features 69// (e.g. std::negation) added in 2015u3: 70# if _MSC_FULL_VER < 190024210 71# error pybind11 requires MSVC 2015 update 3 or newer 72# endif 73#endif 74 75#if !defined(PYBIND11_EXPORT) 76# if defined(WIN32) || defined(_WIN32) 77# define PYBIND11_EXPORT __declspec(dllexport) 78# else 79# define PYBIND11_EXPORT __attribute__ ((visibility("default"))) 80# endif 81#endif 82 83#if defined(_MSC_VER) 84# define PYBIND11_NOINLINE __declspec(noinline) 85#else 86# define PYBIND11_NOINLINE __attribute__ ((noinline)) 87#endif 88 89#if defined(PYBIND11_CPP14) 90# define PYBIND11_DEPRECATED(reason) [[deprecated(reason)]] 91#else 92# define PYBIND11_DEPRECATED(reason) __attribute__((deprecated(reason))) 93#endif 94 95#define PYBIND11_VERSION_MAJOR 2 96#define PYBIND11_VERSION_MINOR 4 97#define PYBIND11_VERSION_PATCH 1 98 99/// Include Python header, disable linking to pythonX_d.lib on Windows in debug mode 100#if defined(_MSC_VER) 101# if (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 4) 102# define HAVE_ROUND 1 103# endif 104# pragma warning(push) 105# pragma warning(disable: 4510 4610 4512 4005) 106# if defined(_DEBUG) 107# define PYBIND11_DEBUG_MARKER 108# undef _DEBUG 109# endif 110#endif 111 112#include <Python.h> 113#include <frameobject.h> 114#include <pythread.h> 115 116#if defined(isalnum) 117# undef isalnum 118# undef isalpha 119# undef islower 120# undef isspace 121# undef isupper 122# undef tolower 123# undef toupper 124#endif 125 126#if defined(_MSC_VER) 127# if defined(PYBIND11_DEBUG_MARKER) 128# define _DEBUG 129# undef PYBIND11_DEBUG_MARKER 130# endif 131# pragma warning(pop) 132#endif 133 134#include <cstddef> 135#include <cstring> 136#include <forward_list> 137#include <vector> 138#include <string> 139#include <stdexcept> 140#include <unordered_set> 141#include <unordered_map> 142#include <memory> 143#include <typeindex> 144#include <type_traits> 145 146#if PY_MAJOR_VERSION >= 3 /// Compatibility macros for various Python versions 147#define PYBIND11_INSTANCE_METHOD_NEW(ptr, class_) PyInstanceMethod_New(ptr) 148#define PYBIND11_INSTANCE_METHOD_CHECK PyInstanceMethod_Check 149#define PYBIND11_INSTANCE_METHOD_GET_FUNCTION PyInstanceMethod_GET_FUNCTION 150#define PYBIND11_BYTES_CHECK PyBytes_Check 151#define PYBIND11_BYTES_FROM_STRING PyBytes_FromString 152#define PYBIND11_BYTES_FROM_STRING_AND_SIZE PyBytes_FromStringAndSize 153#define PYBIND11_BYTES_AS_STRING_AND_SIZE PyBytes_AsStringAndSize 154#define PYBIND11_BYTES_AS_STRING PyBytes_AsString 155#define PYBIND11_BYTES_SIZE PyBytes_Size 156#define PYBIND11_LONG_CHECK(o) PyLong_Check(o) 157#define PYBIND11_LONG_AS_LONGLONG(o) PyLong_AsLongLong(o) 158#define PYBIND11_LONG_FROM_SIGNED(o) PyLong_FromSsize_t((ssize_t) o) 159#define PYBIND11_LONG_FROM_UNSIGNED(o) PyLong_FromSize_t((size_t) o) 160#define PYBIND11_BYTES_NAME "bytes" 161#define PYBIND11_STRING_NAME "str" 162#define PYBIND11_SLICE_OBJECT PyObject 163#define PYBIND11_FROM_STRING PyUnicode_FromString 164#define PYBIND11_STR_TYPE ::pybind11::str 165#define PYBIND11_BOOL_ATTR "__bool__" 166#define PYBIND11_NB_BOOL(ptr) ((ptr)->nb_bool) 167// Providing a separate declaration to make Clang's -Wmissing-prototypes happy 168#define PYBIND11_PLUGIN_IMPL(name) \ 169 extern "C" PYBIND11_EXPORT PyObject *PyInit_##name(); \ 170 extern "C" PYBIND11_EXPORT PyObject *PyInit_##name() 171 172#else 173#define PYBIND11_INSTANCE_METHOD_NEW(ptr, class_) PyMethod_New(ptr, nullptr, class_) 174#define PYBIND11_INSTANCE_METHOD_CHECK PyMethod_Check 175#define PYBIND11_INSTANCE_METHOD_GET_FUNCTION PyMethod_GET_FUNCTION 176#define PYBIND11_BYTES_CHECK PyString_Check 177#define PYBIND11_BYTES_FROM_STRING PyString_FromString 178#define PYBIND11_BYTES_FROM_STRING_AND_SIZE PyString_FromStringAndSize 179#define PYBIND11_BYTES_AS_STRING_AND_SIZE PyString_AsStringAndSize 180#define PYBIND11_BYTES_AS_STRING PyString_AsString 181#define PYBIND11_BYTES_SIZE PyString_Size 182#define PYBIND11_LONG_CHECK(o) (PyInt_Check(o) || PyLong_Check(o)) 183#define PYBIND11_LONG_AS_LONGLONG(o) (PyInt_Check(o) ? (long long) PyLong_AsLong(o) : PyLong_AsLongLong(o)) 184#define PYBIND11_LONG_FROM_SIGNED(o) PyInt_FromSsize_t((ssize_t) o) // Returns long if needed. 185#define PYBIND11_LONG_FROM_UNSIGNED(o) PyInt_FromSize_t((size_t) o) // Returns long if needed. 186#define PYBIND11_BYTES_NAME "str" 187#define PYBIND11_STRING_NAME "unicode" 188#define PYBIND11_SLICE_OBJECT PySliceObject 189#define PYBIND11_FROM_STRING PyString_FromString 190#define PYBIND11_STR_TYPE ::pybind11::bytes 191#define PYBIND11_BOOL_ATTR "__nonzero__" 192#define PYBIND11_NB_BOOL(ptr) ((ptr)->nb_nonzero) 193// Providing a separate PyInit decl to make Clang's -Wmissing-prototypes happy 194#define PYBIND11_PLUGIN_IMPL(name) \ 195 static PyObject *pybind11_init_wrapper(); \ 196 extern "C" PYBIND11_EXPORT void init##name(); \ 197 extern "C" PYBIND11_EXPORT void init##name() { \ 198 (void)pybind11_init_wrapper(); \ 199 } \ 200 PyObject *pybind11_init_wrapper() 201#endif 202 203#if PY_VERSION_HEX >= 0x03050000 && PY_VERSION_HEX < 0x03050200 204extern "C" { 205 struct _Py_atomic_address { void *value; }; 206 PyAPI_DATA(_Py_atomic_address) _PyThreadState_Current; 207} 208#endif 209 210#define PYBIND11_TRY_NEXT_OVERLOAD ((PyObject *) 1) // special failure return code 211#define PYBIND11_STRINGIFY(x) #x 212#define PYBIND11_TOSTRING(x) PYBIND11_STRINGIFY(x) 213#define PYBIND11_CONCAT(first, second) first##second 214 215#define PYBIND11_CHECK_PYTHON_VERSION \ 216 { \ 217 const char *compiled_ver = PYBIND11_TOSTRING(PY_MAJOR_VERSION) \ 218 "." PYBIND11_TOSTRING(PY_MINOR_VERSION); \ 219 const char *runtime_ver = Py_GetVersion(); \ 220 size_t len = std::strlen(compiled_ver); \ 221 if (std::strncmp(runtime_ver, compiled_ver, len) != 0 \ 222 || (runtime_ver[len] >= '0' && runtime_ver[len] <= '9')) { \ 223 PyErr_Format(PyExc_ImportError, \ 224 "Python version mismatch: module was compiled for Python %s, " \ 225 "but the interpreter version is incompatible: %s.", \ 226 compiled_ver, runtime_ver); \ 227 return nullptr; \ 228 } \ 229 } 230 231#define PYBIND11_CATCH_INIT_EXCEPTIONS \ 232 catch (pybind11::error_already_set &e) { \ 233 PyErr_SetString(PyExc_ImportError, e.what()); \ 234 return nullptr; \ 235 } catch (const std::exception &e) { \ 236 PyErr_SetString(PyExc_ImportError, e.what()); \ 237 return nullptr; \ 238 } \ 239 240/** \rst 241 ***Deprecated in favor of PYBIND11_MODULE*** 242 243 This macro creates the entry point that will be invoked when the Python interpreter 244 imports a plugin library. Please create a `module` in the function body and return 245 the pointer to its underlying Python object at the end. 246 247 .. code-block:: cpp 248 249 PYBIND11_PLUGIN(example) { 250 pybind11::module m("example", "pybind11 example plugin"); 251 /// Set up bindings here 252 return m.ptr(); 253 } 254\endrst */ 255#define PYBIND11_PLUGIN(name) \ 256 PYBIND11_DEPRECATED("PYBIND11_PLUGIN is deprecated, use PYBIND11_MODULE") \ 257 static PyObject *pybind11_init(); \ 258 PYBIND11_PLUGIN_IMPL(name) { \ 259 PYBIND11_CHECK_PYTHON_VERSION \ 260 try { \ 261 return pybind11_init(); \ 262 } PYBIND11_CATCH_INIT_EXCEPTIONS \ 263 } \ 264 PyObject *pybind11_init() 265 266/** \rst 267 This macro creates the entry point that will be invoked when the Python interpreter 268 imports an extension module. The module name is given as the fist argument and it 269 should not be in quotes. The second macro argument defines a variable of type 270 `py::module` which can be used to initialize the module. 271 272 .. code-block:: cpp 273 274 PYBIND11_MODULE(example, m) { 275 m.doc() = "pybind11 example module"; 276 277 // Add bindings here 278 m.def("foo", []() { 279 return "Hello, World!"; 280 }); 281 } 282\endrst */ 283#define PYBIND11_MODULE(name, variable) \ 284 static void PYBIND11_CONCAT(pybind11_init_, name)(pybind11::module &); \ 285 PYBIND11_PLUGIN_IMPL(name) { \ 286 PYBIND11_CHECK_PYTHON_VERSION \ 287 auto m = pybind11::module(PYBIND11_TOSTRING(name)); \ 288 try { \ 289 PYBIND11_CONCAT(pybind11_init_, name)(m); \ 290 return m.ptr(); \ 291 } PYBIND11_CATCH_INIT_EXCEPTIONS \ 292 } \ 293 void PYBIND11_CONCAT(pybind11_init_, name)(pybind11::module &variable) 294 295 296NAMESPACE_BEGIN(PYBIND11_NAMESPACE) 297 298using ssize_t = Py_ssize_t; 299using size_t = std::size_t; 300 301/// Approach used to cast a previously unknown C++ instance into a Python object 302enum class return_value_policy : uint8_t { 303 /** This is the default return value policy, which falls back to the policy 304 return_value_policy::take_ownership when the return value is a pointer. 305 Otherwise, it uses return_value::move or return_value::copy for rvalue 306 and lvalue references, respectively. See below for a description of what 307 all of these different policies do. */ 308 automatic = 0, 309 310 /** As above, but use policy return_value_policy::reference when the return 311 value is a pointer. This is the default conversion policy for function 312 arguments when calling Python functions manually from C++ code (i.e. via 313 handle::operator()). You probably won't need to use this. */ 314 automatic_reference, 315 316 /** Reference an existing object (i.e. do not create a new copy) and take 317 ownership. Python will call the destructor and delete operator when the 318 object’s reference count reaches zero. Undefined behavior ensues when 319 the C++ side does the same.. */ 320 take_ownership, 321 322 /** Create a new copy of the returned object, which will be owned by 323 Python. This policy is comparably safe because the lifetimes of the two 324 instances are decoupled. */ 325 copy, 326 327 /** Use std::move to move the return value contents into a new instance 328 that will be owned by Python. This policy is comparably safe because the 329 lifetimes of the two instances (move source and destination) are 330 decoupled. */ 331 move, 332 333 /** Reference an existing object, but do not take ownership. The C++ side 334 is responsible for managing the object’s lifetime and deallocating it 335 when it is no longer used. Warning: undefined behavior will ensue when 336 the C++ side deletes an object that is still referenced and used by 337 Python. */ 338 reference, 339 340 /** This policy only applies to methods and properties. It references the 341 object without taking ownership similar to the above 342 return_value_policy::reference policy. In contrast to that policy, the 343 function or property’s implicit this argument (called the parent) is 344 considered to be the the owner of the return value (the child). 345 pybind11 then couples the lifetime of the parent to the child via a 346 reference relationship that ensures that the parent cannot be garbage 347 collected while Python is still using the child. More advanced 348 variations of this scheme are also possible using combinations of 349 return_value_policy::reference and the keep_alive call policy */ 350 reference_internal 351}; 352 353NAMESPACE_BEGIN(detail) 354 355inline static constexpr int log2(size_t n, int k = 0) { return (n <= 1) ? k : log2(n >> 1, k + 1); } 356 357// Returns the size as a multiple of sizeof(void *), rounded up. 358inline static constexpr size_t size_in_ptrs(size_t s) { return 1 + ((s - 1) >> log2(sizeof(void *))); } 359 360/** 361 * The space to allocate for simple layout instance holders (see below) in multiple of the size of 362 * a pointer (e.g. 2 means 16 bytes on 64-bit architectures). The default is the minimum required 363 * to holder either a std::unique_ptr or std::shared_ptr (which is almost always 364 * sizeof(std::shared_ptr<T>)). 365 */ 366constexpr size_t instance_simple_holder_in_ptrs() { 367 static_assert(sizeof(std::shared_ptr<int>) >= sizeof(std::unique_ptr<int>), 368 "pybind assumes std::shared_ptrs are at least as big as std::unique_ptrs"); 369 return size_in_ptrs(sizeof(std::shared_ptr<int>)); 370} 371 372// Forward declarations 373struct type_info; 374struct value_and_holder; 375 376struct nonsimple_values_and_holders { 377 void **values_and_holders; 378 uint8_t *status; 379}; 380 381/// The 'instance' type which needs to be standard layout (need to be able to use 'offsetof') 382struct instance { 383 PyObject_HEAD 384 /// Storage for pointers and holder; see simple_layout, below, for a description 385 union { 386 void *simple_value_holder[1 + instance_simple_holder_in_ptrs()]; 387 nonsimple_values_and_holders nonsimple; 388 }; 389 /// Weak references 390 PyObject *weakrefs; 391 /// If true, the pointer is owned which means we're free to manage it with a holder. 392 bool owned : 1; 393 /** 394 * An instance has two possible value/holder layouts. 395 * 396 * Simple layout (when this flag is true), means the `simple_value_holder` is set with a pointer 397 * and the holder object governing that pointer, i.e. [val1*][holder]. This layout is applied 398 * whenever there is no python-side multiple inheritance of bound C++ types *and* the type's 399 * holder will fit in the default space (which is large enough to hold either a std::unique_ptr 400 * or std::shared_ptr). 401 * 402 * Non-simple layout applies when using custom holders that require more space than `shared_ptr` 403 * (which is typically the size of two pointers), or when multiple inheritance is used on the 404 * python side. Non-simple layout allocates the required amount of memory to have multiple 405 * bound C++ classes as parents. Under this layout, `nonsimple.values_and_holders` is set to a 406 * pointer to allocated space of the required space to hold a sequence of value pointers and 407 * holders followed `status`, a set of bit flags (1 byte each), i.e. 408 * [val1*][holder1][val2*][holder2]...[bb...] where each [block] is rounded up to a multiple of 409 * `sizeof(void *)`. `nonsimple.status` is, for convenience, a pointer to the 410 * beginning of the [bb...] block (but not independently allocated). 411 * 412 * Status bits indicate whether the associated holder is constructed (& 413 * status_holder_constructed) and whether the value pointer is registered (& 414 * status_instance_registered) in `registered_instances`. 415 */ 416 bool simple_layout : 1; 417 /// For simple layout, tracks whether the holder has been constructed 418 bool simple_holder_constructed : 1; 419 /// For simple layout, tracks whether the instance is registered in `registered_instances` 420 bool simple_instance_registered : 1; 421 /// If true, get_internals().patients has an entry for this object 422 bool has_patients : 1; 423 424 /// Initializes all of the above type/values/holders data (but not the instance values themselves) 425 void allocate_layout(); 426 427 /// Destroys/deallocates all of the above 428 void deallocate_layout(); 429 430 /// Returns the value_and_holder wrapper for the given type (or the first, if `find_type` 431 /// omitted). Returns a default-constructed (with `.inst = nullptr`) object on failure if 432 /// `throw_if_missing` is false. 433 value_and_holder get_value_and_holder(const type_info *find_type = nullptr, bool throw_if_missing = true); 434 435 /// Bit values for the non-simple status flags 436 static constexpr uint8_t status_holder_constructed = 1; 437 static constexpr uint8_t status_instance_registered = 2; 438}; 439 440static_assert(std::is_standard_layout<instance>::value, "Internal error: `pybind11::detail::instance` is not standard layout!"); 441 442/// from __cpp_future__ import (convenient aliases from C++14/17) 443#if defined(PYBIND11_CPP14) && (!defined(_MSC_VER) || _MSC_VER >= 1910) 444using std::enable_if_t; 445using std::conditional_t; 446using std::remove_cv_t; 447using std::remove_reference_t; 448#else 449template <bool B, typename T = void> using enable_if_t = typename std::enable_if<B, T>::type; 450template <bool B, typename T, typename F> using conditional_t = typename std::conditional<B, T, F>::type; 451template <typename T> using remove_cv_t = typename std::remove_cv<T>::type; 452template <typename T> using remove_reference_t = typename std::remove_reference<T>::type; 453#endif 454 455/// Index sequences 456#if defined(PYBIND11_CPP14) 457using std::index_sequence; 458using std::make_index_sequence; 459#else 460template<size_t ...> struct index_sequence { }; 461template<size_t N, size_t ...S> struct make_index_sequence_impl : make_index_sequence_impl <N - 1, N - 1, S...> { }; 462template<size_t ...S> struct make_index_sequence_impl <0, S...> { typedef index_sequence<S...> type; }; 463template<size_t N> using make_index_sequence = typename make_index_sequence_impl<N>::type; 464#endif 465 466/// Make an index sequence of the indices of true arguments 467template <typename ISeq, size_t, bool...> struct select_indices_impl { using type = ISeq; }; 468template <size_t... IPrev, size_t I, bool B, bool... Bs> struct select_indices_impl<index_sequence<IPrev...>, I, B, Bs...> 469 : select_indices_impl<conditional_t<B, index_sequence<IPrev..., I>, index_sequence<IPrev...>>, I + 1, Bs...> {}; 470template <bool... Bs> using select_indices = typename select_indices_impl<index_sequence<>, 0, Bs...>::type; 471 472/// Backports of std::bool_constant and std::negation to accommodate older compilers 473template <bool B> using bool_constant = std::integral_constant<bool, B>; 474template <typename T> struct negation : bool_constant<!T::value> { }; 475 476template <typename...> struct void_t_impl { using type = void; }; 477template <typename... Ts> using void_t = typename void_t_impl<Ts...>::type; 478 479/// Compile-time all/any/none of that check the boolean value of all template types 480#if defined(__cpp_fold_expressions) && !(defined(_MSC_VER) && (_MSC_VER < 1916)) 481template <class... Ts> using all_of = bool_constant<(Ts::value && ...)>; 482template <class... Ts> using any_of = bool_constant<(Ts::value || ...)>; 483#elif !defined(_MSC_VER) 484template <bool...> struct bools {}; 485template <class... Ts> using all_of = std::is_same< 486 bools<Ts::value..., true>, 487 bools<true, Ts::value...>>; 488template <class... Ts> using any_of = negation<all_of<negation<Ts>...>>; 489#else 490// MSVC has trouble with the above, but supports std::conjunction, which we can use instead (albeit 491// at a slight loss of compilation efficiency). 492template <class... Ts> using all_of = std::conjunction<Ts...>; 493template <class... Ts> using any_of = std::disjunction<Ts...>; 494#endif 495template <class... Ts> using none_of = negation<any_of<Ts...>>; 496 497template <class T, template<class> class... Predicates> using satisfies_all_of = all_of<Predicates<T>...>; 498template <class T, template<class> class... Predicates> using satisfies_any_of = any_of<Predicates<T>...>; 499template <class T, template<class> class... Predicates> using satisfies_none_of = none_of<Predicates<T>...>; 500 501/// Strip the class from a method type 502template <typename T> struct remove_class { }; 503template <typename C, typename R, typename... A> struct remove_class<R (C::*)(A...)> { typedef R type(A...); }; 504template <typename C, typename R, typename... A> struct remove_class<R (C::*)(A...) const> { typedef R type(A...); }; 505 506/// Helper template to strip away type modifiers 507template <typename T> struct intrinsic_type { typedef T type; }; 508template <typename T> struct intrinsic_type<const T> { typedef typename intrinsic_type<T>::type type; }; 509template <typename T> struct intrinsic_type<T*> { typedef typename intrinsic_type<T>::type type; }; 510template <typename T> struct intrinsic_type<T&> { typedef typename intrinsic_type<T>::type type; }; 511template <typename T> struct intrinsic_type<T&&> { typedef typename intrinsic_type<T>::type type; }; 512template <typename T, size_t N> struct intrinsic_type<const T[N]> { typedef typename intrinsic_type<T>::type type; }; 513template <typename T, size_t N> struct intrinsic_type<T[N]> { typedef typename intrinsic_type<T>::type type; }; 514template <typename T> using intrinsic_t = typename intrinsic_type<T>::type; 515 516/// Helper type to replace 'void' in some expressions 517struct void_type { }; 518 519/// Helper template which holds a list of types 520template <typename...> struct type_list { }; 521 522/// Compile-time integer sum 523#ifdef __cpp_fold_expressions 524template <typename... Ts> constexpr size_t constexpr_sum(Ts... ns) { return (0 + ... + size_t{ns}); } 525#else 526constexpr size_t constexpr_sum() { return 0; } 527template <typename T, typename... Ts> 528constexpr size_t constexpr_sum(T n, Ts... ns) { return size_t{n} + constexpr_sum(ns...); } 529#endif 530 531NAMESPACE_BEGIN(constexpr_impl) 532/// Implementation details for constexpr functions 533constexpr int first(int i) { return i; } 534template <typename T, typename... Ts> 535constexpr int first(int i, T v, Ts... vs) { return v ? i : first(i + 1, vs...); } 536 537constexpr int last(int /*i*/, int result) { return result; } 538template <typename T, typename... Ts> 539constexpr int last(int i, int result, T v, Ts... vs) { return last(i + 1, v ? i : result, vs...); } 540NAMESPACE_END(constexpr_impl) 541 542/// Return the index of the first type in Ts which satisfies Predicate<T>. Returns sizeof...(Ts) if 543/// none match. 544template <template<typename> class Predicate, typename... Ts> 545constexpr int constexpr_first() { return constexpr_impl::first(0, Predicate<Ts>::value...); } 546 547/// Return the index of the last type in Ts which satisfies Predicate<T>, or -1 if none match. 548template <template<typename> class Predicate, typename... Ts> 549constexpr int constexpr_last() { return constexpr_impl::last(0, -1, Predicate<Ts>::value...); } 550 551/// Return the Nth element from the parameter pack 552template <size_t N, typename T, typename... Ts> 553struct pack_element { using type = typename pack_element<N - 1, Ts...>::type; }; 554template <typename T, typename... Ts> 555struct pack_element<0, T, Ts...> { using type = T; }; 556 557/// Return the one and only type which matches the predicate, or Default if none match. 558/// If more than one type matches the predicate, fail at compile-time. 559template <template<typename> class Predicate, typename Default, typename... Ts> 560struct exactly_one { 561 static constexpr auto found = constexpr_sum(Predicate<Ts>::value...); 562 static_assert(found <= 1, "Found more than one type matching the predicate"); 563 564 static constexpr auto index = found ? constexpr_first<Predicate, Ts...>() : 0; 565 using type = conditional_t<found, typename pack_element<index, Ts...>::type, Default>; 566}; 567template <template<typename> class P, typename Default> 568struct exactly_one<P, Default> { using type = Default; }; 569 570template <template<typename> class Predicate, typename Default, typename... Ts> 571using exactly_one_t = typename exactly_one<Predicate, Default, Ts...>::type; 572 573/// Defer the evaluation of type T until types Us are instantiated 574template <typename T, typename... /*Us*/> struct deferred_type { using type = T; }; 575template <typename T, typename... Us> using deferred_t = typename deferred_type<T, Us...>::type; 576 577/// Like is_base_of, but requires a strict base (i.e. `is_strict_base_of<T, T>::value == false`, 578/// unlike `std::is_base_of`) 579template <typename Base, typename Derived> using is_strict_base_of = bool_constant< 580 std::is_base_of<Base, Derived>::value && !std::is_same<Base, Derived>::value>; 581 582/// Like is_base_of, but also requires that the base type is accessible (i.e. that a Derived pointer 583/// can be converted to a Base pointer) 584template <typename Base, typename Derived> using is_accessible_base_of = bool_constant< 585 std::is_base_of<Base, Derived>::value && std::is_convertible<Derived *, Base *>::value>; 586 587template <template<typename...> class Base> 588struct is_template_base_of_impl { 589 template <typename... Us> static std::true_type check(Base<Us...> *); 590 static std::false_type check(...); 591}; 592 593/// Check if a template is the base of a type. For example: 594/// `is_template_base_of<Base, T>` is true if `struct T : Base<U> {}` where U can be anything 595template <template<typename...> class Base, typename T> 596#if !defined(_MSC_VER) 597using is_template_base_of = decltype(is_template_base_of_impl<Base>::check((intrinsic_t<T>*)nullptr)); 598#else // MSVC2015 has trouble with decltype in template aliases 599struct is_template_base_of : decltype(is_template_base_of_impl<Base>::check((intrinsic_t<T>*)nullptr)) { }; 600#endif 601 602/// Check if T is an instantiation of the template `Class`. For example: 603/// `is_instantiation<shared_ptr, T>` is true if `T == shared_ptr<U>` where U can be anything. 604template <template<typename...> class Class, typename T> 605struct is_instantiation : std::false_type { }; 606template <template<typename...> class Class, typename... Us> 607struct is_instantiation<Class, Class<Us...>> : std::true_type { }; 608 609/// Check if T is std::shared_ptr<U> where U can be anything 610template <typename T> using is_shared_ptr = is_instantiation<std::shared_ptr, T>; 611 612/// Check if T looks like an input iterator 613template <typename T, typename = void> struct is_input_iterator : std::false_type {}; 614template <typename T> 615struct is_input_iterator<T, void_t<decltype(*std::declval<T &>()), decltype(++std::declval<T &>())>> 616 : std::true_type {}; 617 618template <typename T> using is_function_pointer = bool_constant< 619 std::is_pointer<T>::value && std::is_function<typename std::remove_pointer<T>::type>::value>; 620 621template <typename F> struct strip_function_object { 622 using type = typename remove_class<decltype(&F::operator())>::type; 623}; 624 625// Extracts the function signature from a function, function pointer or lambda. 626template <typename Function, typename F = remove_reference_t<Function>> 627using function_signature_t = conditional_t< 628 std::is_function<F>::value, 629 F, 630 typename conditional_t< 631 std::is_pointer<F>::value || std::is_member_pointer<F>::value, 632 std::remove_pointer<F>, 633 strip_function_object<F> 634 >::type 635>; 636 637/// Returns true if the type looks like a lambda: that is, isn't a function, pointer or member 638/// pointer. Note that this can catch all sorts of other things, too; this is intended to be used 639/// in a place where passing a lambda makes sense. 640template <typename T> using is_lambda = satisfies_none_of<remove_reference_t<T>, 641 std::is_function, std::is_pointer, std::is_member_pointer>; 642 643/// Ignore that a variable is unused in compiler warnings 644inline void ignore_unused(const int *) { } 645 646/// Apply a function over each element of a parameter pack 647#ifdef __cpp_fold_expressions 648#define PYBIND11_EXPAND_SIDE_EFFECTS(PATTERN) (((PATTERN), void()), ...) 649#else 650using expand_side_effects = bool[]; 651#define PYBIND11_EXPAND_SIDE_EFFECTS(PATTERN) pybind11::detail::expand_side_effects{ ((PATTERN), void(), false)..., false } 652#endif 653 654NAMESPACE_END(detail) 655 656/// C++ bindings of builtin Python exceptions 657class builtin_exception : public std::runtime_error { 658public: 659 using std::runtime_error::runtime_error; 660 /// Set the error using the Python C API 661 virtual void set_error() const = 0; 662}; 663 664#define PYBIND11_RUNTIME_EXCEPTION(name, type) \ 665 class name : public builtin_exception { public: \ 666 using builtin_exception::builtin_exception; \ 667 name() : name("") { } \ 668 void set_error() const override { PyErr_SetString(type, what()); } \ 669 }; 670 671PYBIND11_RUNTIME_EXCEPTION(stop_iteration, PyExc_StopIteration) 672PYBIND11_RUNTIME_EXCEPTION(index_error, PyExc_IndexError) 673PYBIND11_RUNTIME_EXCEPTION(key_error, PyExc_KeyError) 674PYBIND11_RUNTIME_EXCEPTION(value_error, PyExc_ValueError) 675PYBIND11_RUNTIME_EXCEPTION(type_error, PyExc_TypeError) 676PYBIND11_RUNTIME_EXCEPTION(buffer_error, PyExc_BufferError) 677PYBIND11_RUNTIME_EXCEPTION(cast_error, PyExc_RuntimeError) /// Thrown when pybind11::cast or handle::call fail due to a type casting error 678PYBIND11_RUNTIME_EXCEPTION(reference_cast_error, PyExc_RuntimeError) /// Used internally 679 680[[noreturn]] PYBIND11_NOINLINE inline void pybind11_fail(const char *reason) { throw std::runtime_error(reason); } 681[[noreturn]] PYBIND11_NOINLINE inline void pybind11_fail(const std::string &reason) { throw std::runtime_error(reason); } 682 683template <typename T, typename SFINAE = void> struct format_descriptor { }; 684 685NAMESPACE_BEGIN(detail) 686// Returns the index of the given type in the type char array below, and in the list in numpy.h 687// The order here is: bool; 8 ints ((signed,unsigned)x(8,16,32,64)bits); float,double,long double; 688// complex float,double,long double. Note that the long double types only participate when long 689// double is actually longer than double (it isn't under MSVC). 690// NB: not only the string below but also complex.h and numpy.h rely on this order. 691template <typename T, typename SFINAE = void> struct is_fmt_numeric { static constexpr bool value = false; }; 692template <typename T> struct is_fmt_numeric<T, enable_if_t<std::is_arithmetic<T>::value>> { 693 static constexpr bool value = true; 694 static constexpr int index = std::is_same<T, bool>::value ? 0 : 1 + ( 695 std::is_integral<T>::value ? detail::log2(sizeof(T))*2 + std::is_unsigned<T>::value : 8 + ( 696 std::is_same<T, double>::value ? 1 : std::is_same<T, long double>::value ? 2 : 0)); 697}; 698NAMESPACE_END(detail) 699 700template <typename T> struct format_descriptor<T, detail::enable_if_t<std::is_arithmetic<T>::value>> { 701 static constexpr const char c = "?bBhHiIqQfdg"[detail::is_fmt_numeric<T>::index]; 702 static constexpr const char value[2] = { c, '\0' }; 703 static std::string format() { return std::string(1, c); } 704}; 705 706#if !defined(PYBIND11_CPP17) 707 708template <typename T> constexpr const char format_descriptor< 709 T, detail::enable_if_t<std::is_arithmetic<T>::value>>::value[2]; 710 711#endif 712 713/// RAII wrapper that temporarily clears any Python error state 714struct error_scope { 715 PyObject *type, *value, *trace; 716 error_scope() { PyErr_Fetch(&type, &value, &trace); } 717 ~error_scope() { PyErr_Restore(type, value, trace); } 718}; 719 720/// Dummy destructor wrapper that can be used to expose classes with a private destructor 721struct nodelete { template <typename T> void operator()(T*) { } }; 722 723NAMESPACE_BEGIN(detail) 724template <typename... Args> 725struct overload_cast_impl { 726 constexpr overload_cast_impl() {} // MSVC 2015 needs this 727 728 template <typename Return> 729 constexpr auto operator()(Return (*pf)(Args...)) const noexcept 730 -> decltype(pf) { return pf; } 731 732 template <typename Return, typename Class> 733 constexpr auto operator()(Return (Class::*pmf)(Args...), std::false_type = {}) const noexcept 734 -> decltype(pmf) { return pmf; } 735 736 template <typename Return, typename Class> 737 constexpr auto operator()(Return (Class::*pmf)(Args...) const, std::true_type) const noexcept 738 -> decltype(pmf) { return pmf; } 739}; 740NAMESPACE_END(detail) 741 742// overload_cast requires variable templates: C++14 743#if defined(PYBIND11_CPP14) 744#define PYBIND11_OVERLOAD_CAST 1 745/// Syntax sugar for resolving overloaded function pointers: 746/// - regular: static_cast<Return (Class::*)(Arg0, Arg1, Arg2)>(&Class::func) 747/// - sweet: overload_cast<Arg0, Arg1, Arg2>(&Class::func) 748template <typename... Args> 749static constexpr detail::overload_cast_impl<Args...> overload_cast = {}; 750// MSVC 2015 only accepts this particular initialization syntax for this variable template. 751#endif 752 753/// Const member function selector for overload_cast 754/// - regular: static_cast<Return (Class::*)(Arg) const>(&Class::func) 755/// - sweet: overload_cast<Arg>(&Class::func, const_) 756static constexpr auto const_ = std::true_type{}; 757 758#if !defined(PYBIND11_CPP14) // no overload_cast: providing something that static_assert-fails: 759template <typename... Args> struct overload_cast { 760 static_assert(detail::deferred_t<std::false_type, Args...>::value, 761 "pybind11::overload_cast<...> requires compiling in C++14 mode"); 762}; 763#endif // overload_cast 764 765NAMESPACE_BEGIN(detail) 766 767// Adaptor for converting arbitrary container arguments into a vector; implicitly convertible from 768// any standard container (or C-style array) supporting std::begin/std::end, any singleton 769// arithmetic type (if T is arithmetic), or explicitly constructible from an iterator pair. 770template <typename T> 771class any_container { 772 std::vector<T> v; 773public: 774 any_container() = default; 775 776 // Can construct from a pair of iterators 777 template <typename It, typename = enable_if_t<is_input_iterator<It>::value>> 778 any_container(It first, It last) : v(first, last) { } 779 780 // Implicit conversion constructor from any arbitrary container type with values convertible to T 781 template <typename Container, typename = enable_if_t<std::is_convertible<decltype(*std::begin(std::declval<const Container &>())), T>::value>> 782 any_container(const Container &c) : any_container(std::begin(c), std::end(c)) { } 783 784 // initializer_list's aren't deducible, so don't get matched by the above template; we need this 785 // to explicitly allow implicit conversion from one: 786 template <typename TIn, typename = enable_if_t<std::is_convertible<TIn, T>::value>> 787 any_container(const std::initializer_list<TIn> &c) : any_container(c.begin(), c.end()) { } 788 789 // Avoid copying if given an rvalue vector of the correct type. 790 any_container(std::vector<T> &&v) : v(std::move(v)) { } 791 792 // Moves the vector out of an rvalue any_container 793 operator std::vector<T> &&() && { return std::move(v); } 794 795 // Dereferencing obtains a reference to the underlying vector 796 std::vector<T> &operator*() { return v; } 797 const std::vector<T> &operator*() const { return v; } 798 799 // -> lets you call methods on the underlying vector 800 std::vector<T> *operator->() { return &v; } 801 const std::vector<T> *operator->() const { return &v; } 802}; 803 804NAMESPACE_END(detail) 805 806 807 808NAMESPACE_END(PYBIND11_NAMESPACE) 809