1. Jun 29, 2020
  2. Jun 18, 2020
  3. Jun 16, 2020
  4. Jun 11, 2020
  5. Jun 10, 2020
  6. Jun 09, 2020
  7. Jun 05, 2020
  8. May 31, 2020
  9. Apr 27, 2020
  10. Apr 26, 2020
  11. Apr 14, 2020
    • Ralf W. Grosse-Kunstleve's avatar
      Adding a default virtual destructor to Animal type in test_tagbased_polymorphic.cpp. · f6e543b1
      Ralf W. Grosse-Kunstleve authored
      With this change, and cast.h as-is in master, test_tagbased_polymorphic.cpp fails to compile with the error message below.
      With the cast.h change in pull/2016, building and testing succeeds.
      
      cd pybind11/build/tests && /usr/bin/c++  -DPYBIND11_TEST_BOOST -DPYBIND11_TEST_EIGEN -Dpybind11_tests_EXPORTS -Ipybind11/include -I/usr/include/python3.7m -isystem /usr/include/eigen3  -Os -DNDEBUG -fPIC -fvisibility=hidden   -std=c++2a -flto -fno-fat-lto-objects -Wall -Wextra -Wconversion -Wcast-qual -Wdeprecated -o CMakeFiles/pybind11_tests.dir/test_tagbased_polymorphic.cpp.o -c pybind11/tests/test_tagbased_polymorphic.cpp
      In file included from pybind11/include/pybind11/attr.h:13,
                       from pybind11/include/pybind11/pybind11.h:44,
                       from pybind11/tests/pybind11_tests.h:2,
                       from pybind11/tests/test_tagbased_polymorphic.cpp:10:
      pybind11/include/pybind11/cast.h: In instantiation of ‘static std::pair<const void*, const pybind11::detail::type_info*> pybind11::detail::type_caster_base<type>::src_and_type(const itype*) [with type = Animal; pybind11::detail::type_caster_base<type>::itype = Animal]’:
      pybind11/include/pybind11/cast.h:906:31:   required from ‘static pybind11::handle pybind11::detail::type_caster_base<type>::cast_holder(const itype*, const void*) [with type = Animal; pybind11::detail::type_caster_base<type>::itype = Animal]’
      pybind11/include/pybind11/cast.h:1566:51:   required from ‘static pybind11::handle pybind11::detail::move_only_holder_caster<type, holder_type>::cast(holder_type&&, pybind11::return_value_policy, pybind11::handle) [with type = Animal; holder_type = std::unique_ptr<Animal>]’
      pybind11/include/pybind11/stl.h:175:69:   required from ‘static pybind11::handle pybind11::detail::list_caster<Type, Value>::cast(T&&, pybind11::return_value_policy, pybind11::handle) [with T = std::vector<std::unique_ptr<Animal> >; Type = std::vector<std::unique_ptr<Animal> >; Value = std::unique_ptr<Animal>]’
      pybind11/include/pybind11/pybind11.h:159:43:   required from ‘void pybind11::cpp_function::initialize(Func&&, Return (*)(Args ...), const Extra& ...) [with Func = std::vector<std::unique_ptr<Animal> > (*&)(); Return = std::vector<std::unique_ptr<Animal> >; Args = {}; Extra = {pybind11::name, pybind11::scope, pybind11::sibling}]’
      pybind11/include/pybind11/pybind11.h:64:9:   required from ‘pybind11::cpp_function::cpp_function(Return (*)(Args ...), const Extra& ...) [with Return = std::vector<std::unique_ptr<Animal> >; Args = {}; Extra = {pybind11::name, pybind11::scope, pybind11::sibling}]’
      pybind11/include/pybind11/pybind11.h:819:22:   required from ‘pybind11::module& pybind11::module::def(const char*, Func&&, const Extra& ...) [with Func = std::vector<std::unique_ptr<Animal> > (*)(); Extra = {}]’
      pybind11/tests/test_tagbased_polymorphic.cpp:141:36:   required from here
      pybind11/include/pybind11/cast.h:880:61: error: ambiguous template instantiation for ‘struct pybind11::polymorphic_type_hook<Animal, void>’
               const void *vsrc = polymorphic_type_hook<itype>::get(src, instance_type);
                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
      pybind11/include/pybind11/cast.h:844:8: note: candidates are: ‘template<class itype> struct pybind11::polymorphic_type_hook<itype, typename std::enable_if<std::is_polymorphic<_Tp>::value, void>::type> [with itype = Animal]’
       struct polymorphic_type_hook<itype, detail::enable_if_t<std::is_polymorphic<itype>::value>>
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      pybind11/tests/test_tagbased_polymorphic.cpp:115:12: note:                 ‘template<class itype> struct pybind11::polymorphic_type_hook<itype, typename std::enable_if<std::is_base_of<Animal, itype>::value, void>::type> [with itype = Animal]’
           struct polymorphic_type_hook<itype, detail::enable_if_t<std::is_base_of<Animal, itype>::value>>
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      In file included from pybind11/include/pybind11/attr.h:13,
                       from pybind11/include/pybind11/pybind11.h:44,
                       from pybind11/tests/pybind11_tests.h:2,
                       from pybind11/tests/test_tagbased_polymorphic.cpp:10:
      pybind11/include/pybind11/cast.h:880:61: error: incomplete type ‘pybind11::polymorphic_type_hook<Animal, void>’ used in nested name specifier
               const void *vsrc = polymorphic_type_hook<itype>::get(src, instance_type);
                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
      f6e543b1
    • Ralf W. Grosse-Kunstleve's avatar
      Allows users to specialize polymorphic_type_hook with std::enable_if. · 4697149d
      Ralf W. Grosse-Kunstleve authored
      Currently user specializations of the form
      
      template <typename itype> struct polymorphic_type_hook<itype, std::enable_if_t<...>> { ... };
      
      will fail if itype is also polymorphic, because the existing specialization will also
      be enabled, which leads to 2 equally viable candidates. With this change, user provided
      specializations have higher priority than the built in specialization for polymorphic types.
      4697149d
  12. Mar 31, 2020
  13. Mar 04, 2020