1. 12 Oct, 2017 2 commits
    • Jason Rhinelander's avatar
      Add informative compilation failure for method_adaptor failures · 7672292e
      Jason Rhinelander authored
      When using `method_adaptor` (usually implicitly via a `cl.def("f",
      &D::f)`) a compilation failure results if `f` is actually a method of
      an inaccessible base class made public via `using`, such as:
      
          class B { public: void f() {} };
          class D : private B { public: using B::f; };
      
      pybind deduces `&D::f` as a `B` member function pointer.  Since the base
      class is inaccessible, the cast in `method_adaptor` from a base class
      member function pointer to derived class member function pointer isn't
      valid, and a cast failure results.
      
      This was sort of a regression in 2.2, which introduced `method_adaptor`
      to do the expected thing when the base class *is* accessible.  It wasn't
      actually something that *worked* in 2.1, though: you wouldn't get a
      compile-time failure, but the method was not callable (because the `D *`
      couldn't be cast to a `B *` because of the access restriction).  As a
      result, you'd simply get a run-time failure if you ever tried to call
      the function (this is what #855 fixed).
      
      Thus the change in 2.2 essentially promoted a run-time failure to a
      compile-time failure, so isn't really a regression.
      
      This commit simply adds a `static_assert` with an accessible-base-class
      check so that, rather than just a cryptic cast failure, you get
      something more informative (along with a suggestion for a workaround).
      
      The workaround is to use a lambda, e.g.:
      
          class Derived : private Base {
          public:
              using Base::f;
          };
      
          // In binding code:
          //cl.def("f", &Derived::f); // fails: &Derived::f is actually a base
                                      // class member function pointer
          cl.def("f", [](Derived &self) { return self.f(); });
      
      This is a bit of a nuissance (especially if there are a bunch of
      arguments to forward), but I don't really see another solution.
      
      Fixes #1124
      7672292e
    • Jason Rhinelander's avatar
      Fix `char &` arguments being non-bindable · 1b08df58
      Jason Rhinelander authored
      This changes the caster to return a reference to a (new) local `CharT`
      type caster member so that binding lvalue-reference char arguments
      works (currently it results in a compilation failure).
      
      Fixes #1116
      1b08df58
  2. 10 Oct, 2017 1 commit
  3. 08 Oct, 2017 1 commit
  4. 28 Sep, 2017 1 commit
  5. 21 Sep, 2017 1 commit
    • Ansgar Burchardt's avatar
      correct stride in matrix example and test · a22dd2d1
      Ansgar Burchardt authored
      This also matches the Eigen example for the row-major case.
      
      This also enhances one of the tests to trigger a failure (and fixes it in the PR).  (This isn't really a flaw in pybind itself, but rather fixes wrong code in the test code and docs).
      a22dd2d1
  6. 20 Sep, 2017 2 commits
  7. 16 Sep, 2017 3 commits
    • Dean Moldovan's avatar
      Simplify function signature annotation and parsing · 0aef6422
      Dean Moldovan authored
      `type_descr` is now applied only to the final signature so that it only
      marks the argument types, but not nested types (e.g. for tuples) or
      return types.
      0aef6422
    • Dean Moldovan's avatar
      Use semi-constexpr signatures on MSVC · 56613945
      Dean Moldovan authored
      MSCV does not allow `&typeid(T)` in constexpr contexts, but the string
      part of the type signature can still be constexpr. In order to avoid
      `typeid` as long as possible, `descr` is modified to collect type
      information as template parameters instead of constexpr `typeid`.
      The actual `std::type_info` pointers are only collected in the end,
      as a `constexpr` (gcc/clang) or regular (MSVC) function call.
      
      Not only does it significantly reduce binary size on MSVC, gcc/clang
      benefit a little bit as well, since they can skip some intermediate
      `std::type_info*` arrays.
      56613945
    • Dean Moldovan's avatar
      Make it possible to generate constexpr signatures in C++11 mode · c10ac6cf
      Dean Moldovan authored
      The current C++14 constexpr signatures don't require relaxed constexpr,
      but only `auto` return type deduction. To get around this in C++11,
      the type caster's `name()` static member functions are turned into
      `static constexpr auto` variables.
      c10ac6cf
  8. 14 Sep, 2017 1 commit
  9. 13 Sep, 2017 4 commits
  10. 12 Sep, 2017 2 commits
    • Dean Moldovan's avatar
      Make TypeErrors more informative when an optional header is missing · 2b4477eb
      Dean Moldovan authored
      E.g. trying to convert a `list` to a `std::vector<int>` without
      including <pybind11/stl.h> will now raise an error with a note that
      suggests checking the headers.
      
      The note is only appended if `std::` is found in the function
      signature. This should only be the case when a header is missing.
      E.g. when stl.h is included, the signature would contain `List[int]`
      instead of `std::vector<int>` while using stl_bind.h would produce
      something like `MyVector`. Similarly for `std::map`/`Dict`, `complex`,
      `std::function`/`Callable`, etc.
      
      There's a possibility for false positives, but it's pretty low.
      2b4477eb
    • Gunnar Läthén's avatar
      c64e6b16
  11. 11 Sep, 2017 1 commit
  12. 10 Sep, 2017 4 commits
  13. 08 Sep, 2017 4 commits
    • Dean Moldovan's avatar
      Remove unused value assignment · 2d49aee4
      Dean Moldovan authored
      2d49aee4
    • Dean Moldovan's avatar
    • Dean Moldovan's avatar
      Move the style check/barebones config up to the first position on Travis · cdf38dc6
      Dean Moldovan authored
      This runs the most basic tests first and avoids waiting until the very
      end for style checks.
      
      [skip appveyor]
      cdf38dc6
    • Dean Moldovan's avatar
      Speed up Travis CI build (#1056) · b7c98d21
      Dean Moldovan authored
      * Update Python 3 osx image to xcode8.3 to speed up brew install. 
        The Python 2 osx image remains xcode7.3.
      
      * Have one osx config run in debug mode to improve coverage.
      
      * Only run CMake build tests on two configs to speed up overall build.
      
        The CMake tests take ~30 seconds on each configuration, but we really 
        only need to them to run on two: one on Linux and one on macOS. This
        mirrors the recent change on AppVeyor.
      
      * Merge the style/docs/pip tests with the barebones build.
      
      * Merge 32-bit and CMake install configurations.
      
        This removes clang 3.9 from testing, but there are already 3 other clang 
        versions being tested on Travis and the new xcode8.3 image should be 
        close to clang 3.9.
      
      [skip appveyor]
      b7c98d21
  14. 07 Sep, 2017 1 commit
  15. 06 Sep, 2017 3 commits
  16. 05 Sep, 2017 1 commit
  17. 04 Sep, 2017 2 commits
  18. 01 Sep, 2017 1 commit
  19. 31 Aug, 2017 4 commits
  20. 30 Aug, 2017 1 commit