1. 11 Sep, 2018 14 commits
  2. 29 Apr, 2018 7 commits
  3. 07 Feb, 2018 19 commits
    • MSVC workaround for broken `using detail::_` warning · f99f6851
      Current MSVC generates totally bizarre errors:
      
          error C2884: 'pybind11::detail::_': introduced by using-declaration
          conflicts with local function 'pybind11::detail::_'
      
      which makes no sense (since the supposed "conflict" is the function
      itself).  Work around it by `using namespace detail;` instead (which
      also lets us drop a bunch of other `detail::` qualifications, so isn't
      actually a bad thing).
      Jason Rhinelander committed
    • Use stricter brace initialization · c3d81d23
      This updates the `py::init` constructors to only use brace
      initialization for aggregate initiailization if there is no constructor
      with the given arguments.
      
      This, in particular, fixes the regression in #1247 where the presence of
      a `std::initializer_list<T>` constructor started being invoked for
      constructor invocations in 2.2 even when there was a specific
      constructor of the desired type.
      
      The added test case demonstrates: without this change, it fails to
      compile because the `.def(py::init<std::vector<int>>())` constructor
      tries to invoke the `T(std::initializer_list<std::vector<int>>)`
      constructor rather than the `T(std::vector<int>)` constructor.
      
      By only using `new T{...}`-style construction when a `T(...)`
      constructor doesn't exist, we should bypass this by while still allowing
      `py::init<...>` to be used for aggregate type initialization (since such
      types, by definition, don't have a user-declared constructor).
      Jason Rhinelander committed
    • Don't add duplicate patients · 56c1edb4
      This fixes #1251 (patient vector grows without bounds) for the 2.2.2
      branch by checking that the vector doesn't already have the given
      patient.
      
      This is a little less elegant than the same fix for `master` (which
      changes the patients `vector` to an `unordered_set`), but that requires
      an internals layout change, which this approach avoids.
      Jason Rhinelander committed
    • Fix segfault when reloading interpreter with external modules (#1092) · 20d6d1d4
      * Fix segfault when reloading interpreter with external modules
      
      When embedding the interpreter and loading external modules in that
      embedded interpreter, the external module correctly shares its
      internals_ptr with the one in the embedded interpreter.  When the
      interpreter is shut down, however, only the `internals_ptr` local to
      the embedded code is actually reset to nullptr: the external module
      remains set.
      
      The result is that loading an external pybind11 module, letting the
      interpreter go through a finalize/initialize, then attempting to use
      something in the external module fails because this external module is
      still trying to use the old (destroyed) internals.  This causes
      undefined behaviour (typically a segfault).
      
      This commit fixes it by adding a level of indirection in the internals
      path, converting the local internals variable to `internals **` instead
      of `internals *`.  With this change, we can detect a stale internals
      pointer and reload the internals pointer (either from a capsule or by
      creating a new internals instance).
      
      (No issue number: this was reported on gitter by @henryiii and @aoloe).
      Jason Rhinelander committed
    • fix return from std::map bindings to __delitem__ (#1229) · 17ad517d
      Fix return from `std::map` bindings to `__delitem__`: we should be returning `void`, not an iterator.
      
      Also adds a test for map item deletion.
      Jeff VanOss committed
    • misc. typos · ed0a72eb
      Found via `codespell`
      luz.paz committed
    • Use a named rather than anon struct in instance · c8f07b5d
      The anonymous struct nested in a union triggers a -Wnested-anon-type
      warning ("anonymous types declared in an anonymous union are an
      extension") under clang (#1204).  This names the struct and defines it
      out of the definition of `instance` to get around to warning (and makes
      the code slightly simpler).
      Jason Rhinelander committed
    • Fixes for numpy 1.14.0 compatibility · 7f170fe4
      - UPDATEIFCOPY is deprecated, replaced with similar (but not identical)
        WRITEBACKIFCOPY; trying to access the flag causes a deprecation
        warning under numpy 1.14, so just check the new flag there.
      - Numpy `repr` formatting of floats changed in 1.14.0 to `[1., 2., 3.]`
        instead of the pre-1.14 `[ 1.,  2.,  3.]`.  Updated the tests to
        check for equality with the `repr(...)` value rather than the
        hard-coded (and now version-dependent) string representation.
      Jason Rhinelander committed
    • Simplify arg copying · 0c7aec48
      Jason Rhinelander committed
    • Fix leak in var arg handling · 155cc7c4
      When using the mixed position + vararg path, pybind over inc_ref's
      the vararg positions. Printing the ref_count() of `item` before
      and after this change you see:
      
      Before change:
      
      ```
      refcount of item before assign 3
      refcount of item after assign 5
      ```
      
      After change
      ```
      refcount of item before assign 3
      refcount of item after assign 4
      ```
      Zach DeVito committed
    • Fix premature destruction of args/kwargs arguments · c715c70e
      The `py::args` or `py::kwargs` arguments aren't properly referenced
      when added to the function_call arguments list: their reference counts
      drop to zero if the first (non-converting) function call fails, which
      means they might be cleaned up before the second pass call runs.
      
      This commit adds a couple of extra `object`s to the `function_call`
      where we can stash a reference to them when needed to tie their
      lifetime to the function_call object's lifetime.
      
      (Credit to YannickJadoul for catching and proposing a fix in #1223).
      Jason Rhinelander committed
    • Silence new MSVC C++17 deprecation warnings · 3793c7ed
      In the latest MSVC in C++17 mode including Eigen causes warnings:
      
          warning C4996: 'std::unary_negate<_Fn>': warning STL4008: std::not1(),
          std::not2(), std::unary_negate, and std::binary_negate are deprecated in
          C++17. They are superseded by std::not_fn(). You can define
          _SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING or
          _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have
          received this warning.
      
      This disables 4996 for the Eigen includes.
      
      Catch generates a similar warning for std::uncaught_exception, so
      disable the warning there, too.
      
      In both cases this is temporary; we can (and should) remove the warnings
      disabling once new upstream versions of Eigen and Catch are available
      that address the warning. (The Catch one, in particular, looks to be
      fixed in upstream master, so will probably be fixed in the next (2.0.2)
      release).
      Jason Rhinelander committed