ros2 / orocos_kdl_vendor

Apache License 2.0
2 stars 6 forks source link

PyBind11 Error: Use of deleted function std:hash #29

Open LikeSmith opened 2 months ago

LikeSmith commented 2 months ago

When I build try to build this package as part of ros2 jazzy, I get the following errors:

--- stderr: python_orocos_kdl_vendor
In file included from /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/PyKDL.h:28, from /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:28: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h: In instantiation of ‘struct pybind11::detail::op_impl<pybind11::detail::op_hash, pybind11::detail::op_u, KDL::Vector, KDL::Vector, pybind11::detail::undefined_t>’: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/operators.h:94:24: required from ‘void pybind11::detail::op<id, ot, L, R>::execute(Class&, const Extra& ...) const [with Class = pybind11::class_; Extra = {}; pybind11::detail::op_id id = pybind11::detail::op_hash; pybind11::detail::op_type ot = pybind11::detail::op_u; L = pybind11::detail::self_t; R = pybind11::detail::undefined_t]’ 94 | cl.def(op::name(), &op::execute, is_operator(), extra...); | ~~~~^~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/pybind11.h:1600:19: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const T&, const Extra& ...) [with T = pybind11::detail::op<pybind11::detail::op_hash, pybind11::detail::op_u, pybind11::detail::self_t, pybind11::detail::undefined_t>; Extra = {}; typename std::enable_if<T::op_enable_ifhook, int>::type = 0; type = KDL::Vector; options = {}]’ 1600 | op.execute(this, extra...); | ~~^~~~~ /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:80:15: required from here 80 | vector.def(py::hash(py::self)); | ~~^~~~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:187:1: error: use of deleted function ‘std::hash::hash()’ 187 | PYBIND11_UNARY_OPERATOR(hash, hash, std::hash()(l)) | ^~~~~~~ In file included from /usr/include/c++/14.2.1/string_view:50, from /usr/include/c++/14.2.1/bits/basic_string.h:47, from /usr/include/c++/14.2.1/string:54, from /usr/include/c++/14.2.1/bits/locale_classes.h:40, from /usr/include/c++/14.2.1/bits/ios_base.h:41, from /usr/include/c++/14.2.1/ios:44, from /usr/include/c++/14.2.1/ostream:40, from /usr/include/c++/14.2.1/iostream:41, from /usr/include/kdl/utilities/utility_io.h:27, from /usr/include/kdl/frames_io.hpp:79, from /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:27: /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: note: ‘std::hash::hash()’ is implicitly deleted because the default definition would be ill-formed: 102 | struct hash : hash_enum<_Tp> | ^~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: error: no matching function for call to ‘std::__hash_enum<KDL::Vector, false>::hash_enum()’ /usr/include/c++/14.2.1/bits/functional_hash.h:83:7: note: candidate: ‘std::hash_enum<_Tp, >::hash_enum(std::hash_enum<_Tp, >&&) [with _Tp = KDL::Vector; bool = false]’ 83 | __hash_enum(hash_enum&&); | ^~~ /usr/include/c++/14.2.1/bits/functional_hash.h:83:7: note: candidate expects 1 argument, 0 provided /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: error: ‘std::hash_enum<_Tp, >::~hash_enum() [with _Tp = KDL::Vector; bool = false]’ is private within this context 102 | struct hash : __hash_enum<_Tp> | ^~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:84:7: note: declared private here 84 | ~__hash_enum(); | ^ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:187:1: note: use ‘-fdiagnostics-all-candidates’ to display considered candidates 187 | PYBIND11_UNARY_OPERATOR(hash, hash, std::hash()(l)) | ^~~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/operators.h: In instantiation of ‘void pybind11::detail::op<id, ot, L, R>::execute(Class&, const Extra& ...) const [with Class = pybind11::class_; Extra = {}; pybind11::detail::op_id id = pybind11::detail::op_hash; pybind11::detail::op_type ot = pybind11::detail::op_u; L = pybind11::detail::self_t; R = pybind11::detail::undefined_t]’: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/pybind11.h:1600:19: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const T&, const Extra& ...) [with T = pybind11::detail::op<pybind11::detail::op_hash, pybind11::detail::op_u, pybind11::detail::self_t, pybind11::detail::undefined_t>; Extra = {}; typename std::enable_if<T::op_enable_ifhook, int>::type = 0; type = KDL::Vector; options = {}]’ 1600 | op.execute(this, extra...); | ~~^~~~~ /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:80:15: required from here 80 | vector.def(py::hash(py::self)); | ~~^~~~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:94:28: error: ‘execute’ is not a member of ‘op’ {aka ‘pybind11::detail::op_impl<pybind11::detail::op_hash, pybind11::detail::op_u, KDL::Vector, KDL::Vector, pybind11::detail::undefined_t>’} 94 | cl.def(op::name(), &op::execute, is_operator(), extra...); | ^~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h: In instantiation of ‘struct pybind11::detail::op_impl<pybind11::detail::op_hash, pybind11::detail::op_u, KDL::Wrench, KDL::Wrench, pybind11::detail::undefined_t>’: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/operators.h:94:24: required from ‘void pybind11::detail::op<id, ot, L, R>::execute(Class&, const Extra& ...) const [with Class = pybind11::class_; Extra = {}; pybind11::detail::op_id id = pybind11::detail::op_hash; pybind11::detail::op_type ot = pybind11::detail::op_u; L = pybind11::detail::self_t; R = pybind11::detail::undefined_t]’ 94 | cl.def(op::name(), &op::execute, is_operator(), extra...); | ~~~~^~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/pybind11.h:1600:19: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const T&, const Extra& ...) [with T = pybind11::detail::op<pybind11::detail::op_hash, pybind11::detail::op_u, pybind11::detail::self_t, pybind11::detail::undefined_t>; Extra = {}; typename std::enable_if<T::op_enable_ifhook, int>::type = 0; type = KDL::Wrench; options = {}]’ 1600 | op.execute(this, extra...); | ~~^~~~~ /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:167:15: required from here 167 | wrench.def(py::hash(py::self)); | ~~^~~~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:187:1: error: use of deleted function ‘std::hash::hash()’ 187 | PYBIND11_UNARY_OPERATOR(hash, hash, std::hash()(l)) | ^~~~~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: note: ‘std::hash::hash()’ is implicitly deleted because the default definition would be ill-formed: 102 | struct hash : hash_enum<_Tp> | ^~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: error: no matching function for call to ‘std::__hash_enum<KDL::Wrench, false>::hash_enum()’ /usr/include/c++/14.2.1/bits/functional_hash.h:83:7: note: candidate: ‘std::hash_enum<_Tp, >::hash_enum(std::hash_enum<_Tp, >&&) [with _Tp = KDL::Wrench; bool = false]’ 83 | __hash_enum(hash_enum&&); | ^~~ /usr/include/c++/14.2.1/bits/functional_hash.h:83:7: note: candidate expects 1 argument, 0 provided /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: error: ‘std::hash_enum<_Tp, >::~hash_enum() [with _Tp = KDL::Wrench; bool = false]’ is private within this context 102 | struct hash : __hash_enum<_Tp> | ^~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:84:7: note: declared private here 84 | ~__hash_enum(); | ^ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:187:1: note: use ‘-fdiagnostics-all-candidates’ to display considered candidates 187 | PYBIND11_UNARY_OPERATOR(hash, hash, std::hash()(l)) | ^~~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/operators.h: In instantiation of ‘void pybind11::detail::op<id, ot, L, R>::execute(Class&, const Extra& ...) const [with Class = pybind11::class_; Extra = {}; pybind11::detail::op_id id = pybind11::detail::op_hash; pybind11::detail::op_type ot = pybind11::detail::op_u; L = pybind11::detail::self_t; R = pybind11::detail::undefined_t]’: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/pybind11.h:1600:19: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const T&, const Extra& ...) [with T = pybind11::detail::op<pybind11::detail::op_hash, pybind11::detail::op_u, pybind11::detail::self_t, pybind11::detail::undefined_t>; Extra = {}; typename std::enable_if<T::op_enable_ifhook, int>::type = 0; type = KDL::Wrench; options = {}]’ 1600 | op.execute(this, extra...); | ~~^~~~~ /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:167:15: required from here 167 | wrench.def(py::hash(py::self)); | ~~^~~~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:94:28: error: ‘execute’ is not a member of ‘op’ {aka ‘pybind11::detail::op_impl<pybind11::detail::op_hash, pybind11::detail::op_u, KDL::Wrench, KDL::Wrench, pybind11::detail::undefined_t>’} 94 | cl.def(op::name(), &op::execute, is_operator(), extra...); | ^~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h: In instantiation of ‘struct pybind11::detail::op_impl<pybind11::detail::op_hash, pybind11::detail::op_u, KDL::Twist, KDL::Twist, pybind11::detail::undefined_t>’: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/operators.h:94:24: required from ‘void pybind11::detail::op<id, ot, L, R>::execute(Class&, const Extra& ...) const [with Class = pybind11::class_; Extra = {}; pybind11::detail::op_id id = pybind11::detail::op_hash; pybind11::detail::op_type ot = pybind11::detail::op_u; L = pybind11::detail::self_t; R = pybind11::detail::undefined_t]’ 94 | cl.def(op::name(), &op::execute, is_operator(), extra...); | ~~~~^~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/pybind11.h:1600:19: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const T&, const Extra& ...) [with T = pybind11::detail::op<pybind11::detail::op_hash, pybind11::detail::op_u, pybind11::detail::self_t, pybind11::detail::undefined_t>; Extra = {}; typename std::enable_if<T::op_enable_ifhook, int>::type = 0; type = KDL::Twist; options = {}]’ 1600 | op.execute(this, extra...); | ~~^~~~~ /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:242:14: required from here 242 | twist.def(py::hash(py::self)); | ~~~^~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:187:1: error: use of deleted function ‘std::hash::hash()’ 187 | PYBIND11_UNARY_OPERATOR(hash, hash, std::hash()(l)) | ^~~~~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: note: ‘std::hash::hash()’ is implicitly deleted because the default definition would be ill-formed: 102 | struct hash : hash_enum<_Tp> | ^~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: error: no matching function for call to ‘std::__hash_enum<KDL::Twist, false>::hash_enum()’ /usr/include/c++/14.2.1/bits/functional_hash.h:83:7: note: candidate: ‘std::hash_enum<_Tp, >::hash_enum(std::hash_enum<_Tp, >&&) [with _Tp = KDL::Twist; bool = false]’ 83 | __hash_enum(hash_enum&&); | ^~~ /usr/include/c++/14.2.1/bits/functional_hash.h:83:7: note: candidate expects 1 argument, 0 provided /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: error: ‘std::hash_enum<_Tp, >::~hash_enum() [with _Tp = KDL::Twist; bool = false]’ is private within this context 102 | struct hash : __hash_enum<_Tp> | ^~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:84:7: note: declared private here 84 | ~__hash_enum(); | ^ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:187:1: note: use ‘-fdiagnostics-all-candidates’ to display considered candidates 187 | PYBIND11_UNARY_OPERATOR(hash, hash, std::hash()(l)) | ^~~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/operators.h: In instantiation of ‘void pybind11::detail::op<id, ot, L, R>::execute(Class&, const Extra& ...) const [with Class = pybind11::class_; Extra = {}; pybind11::detail::op_id id = pybind11::detail::op_hash; pybind11::detail::op_type ot = pybind11::detail::op_u; L = pybind11::detail::self_t; R = pybind11::detail::undefined_t]’: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/pybind11.h:1600:19: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const T&, const Extra& ...) [with T = pybind11::detail::op<pybind11::detail::op_hash, pybind11::detail::op_u, pybind11::detail::self_t, pybind11::detail::undefined_t>; Extra = {}; typename std::enable_if<T::op_enable_ifhook, int>::type = 0; type = KDL::Twist; options = {}]’ 1600 | op.execute(this, extra...); | ~~^~~~~ /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:242:14: required from here 242 | twist.def(py::hash(py::self)); | ~~~^~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:94:28: error: ‘execute’ is not a member of ‘op’ {aka ‘pybind11::detail::op_impl<pybind11::detail::op_hash, pybind11::detail::op_u, KDL::Twist, KDL::Twist, pybind11::detail::undefined_t>’} 94 | cl.def(op::name(), &op::execute, is_operator(), extra...); | ^~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h: In instantiation of ‘struct pybind11::detail::op_impl<pybind11::detail::op_hash, pybind11::detail::op_u, KDL::Rotation, KDL::Rotation, pybind11::detail::undefined_t>’: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/operators.h:94:24: required from ‘void pybind11::detail::op<id, ot, L, R>::execute(Class&, const Extra& ...) const [with Class = pybind11::class_; Extra = {}; pybind11::detail::op_id id = pybind11::detail::op_hash; pybind11::detail::op_type ot = pybind11::detail::op_u; L = pybind11::detail::self_t; R = pybind11::detail::undefined_t]’ 94 | cl.def(op::name(), &op::execute, is_operator(), extra...); | ~~~~^~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/pybind11.h:1600:19: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const T&, const Extra& ...) [with T = pybind11::detail::op<pybind11::detail::op_hash, pybind11::detail::op_u, pybind11::detail::self_t, pybind11::detail::undefined_t>; Extra = {}; typename std::enable_if<T::op_enable_ifhook, int>::type = 0; type = KDL::Rotation; options = {}]’ 1600 | op.execute(this, extra...); | ~~^~~~~ /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:375:17: required from here 375 | rotation.def(py::hash(py::self)); | ~~^~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:187:1: error: use of deleted function ‘std::hash::hash()’ 187 | PYBIND11_UNARY_OPERATOR(hash, hash, std::hash()(l)) | ^~~~~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: note: ‘std::hash::hash()’ is implicitly deleted because the default definition would be ill-formed: 102 | struct hash : hash_enum<_Tp> | ^~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: error: no matching function for call to ‘std::__hash_enum<KDL::Rotation, false>::hash_enum()’ /usr/include/c++/14.2.1/bits/functional_hash.h:83:7: note: candidate: ‘std::hash_enum<_Tp, >::hash_enum(std::hash_enum<_Tp, >&&) [with _Tp = KDL::Rotation; bool = false]’ 83 | __hash_enum(hash_enum&&); | ^~~ /usr/include/c++/14.2.1/bits/functional_hash.h:83:7: note: candidate expects 1 argument, 0 provided /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: error: ‘std::hash_enum<_Tp, >::~hash_enum() [with _Tp = KDL::Rotation; bool = false]’ is private within this context 102 | struct hash : __hash_enum<_Tp> | ^~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:84:7: note: declared private here 84 | ~__hash_enum(); | ^ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:187:1: note: use ‘-fdiagnostics-all-candidates’ to display considered candidates 187 | PYBIND11_UNARY_OPERATOR(hash, hash, std::hash()(l)) | ^~~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/operators.h: In instantiation of ‘void pybind11::detail::op<id, ot, L, R>::execute(Class&, const Extra& ...) const [with Class = pybind11::class_; Extra = {}; pybind11::detail::op_id id = pybind11::detail::op_hash; pybind11::detail::op_type ot = pybind11::detail::op_u; L = pybind11::detail::self_t; R = pybind11::detail::undefined_t]’: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/pybind11.h:1600:19: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const T&, const Extra& ...) [with T = pybind11::detail::op<pybind11::detail::op_hash, pybind11::detail::op_u, pybind11::detail::self_t, pybind11::detail::undefined_t>; Extra = {}; typename std::enable_if<T::op_enable_ifhook, int>::type = 0; type = KDL::Rotation; options = {}]’ 1600 | op.execute(this, extra...); | ~~^~~~~ /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:375:17: required from here 375 | rotation.def(py::hash(py::self)); | ~~^~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:94:28: error: ‘execute’ is not a member of ‘op’ {aka ‘pybind11::detail::op_impl<pybind11::detail::op_hash, pybind11::detail::op_u, KDL::Rotation, KDL::Rotation, pybind11::detail::undefined_t>’} 94 | cl.def(op::name(), &op::execute, is_operator(), extra...); | ^~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h: In instantiation of ‘struct pybind11::detail::op_impl<pybind11::detail::op_hash, pybind11::detail::op_u, KDL::Frame, KDL::Frame, pybind11::detail::undefined_t>’: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/operators.h:94:24: required from ‘void pybind11::detail::op<id, ot, L, R>::execute(Class&, const Extra& ...) const [with Class = pybind11::class_; Extra = {}; pybind11::detail::op_id id = pybind11::detail::op_hash; pybind11::detail::op_type ot = pybind11::detail::op_u; L = pybind11::detail::self_t; R = pybind11::detail::undefined_t]’ 94 | cl.def(op::name(), &op::execute, is_operator(), extra...); | ~~~~^~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/pybind11.h:1600:19: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const T&, const Extra& ...) [with T = pybind11::detail::op<pybind11::detail::op_hash, pybind11::detail::op_u, pybind11::detail::self_t, pybind11::detail::undefined_t>; Extra = {}; typename std::enable_if<T::op_enable_ifhook, int>::type = 0; type = KDL::Frame; options = {}]’ 1600 | op.execute(this, extra...); | ~~^~~~~ /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:457:14: required from here 457 | frame.def(py::hash(py::self)); | ~~~^~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:187:1: error: use of deleted function ‘std::hash::hash()’ 187 | PYBIND11_UNARY_OPERATOR(hash, hash, std::hash()(l)) | ^~~~~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: note: ‘std::hash::hash()’ is implicitly deleted because the default definition would be ill-formed: 102 | struct hash : hash_enum<_Tp> | ^~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: error: no matching function for call to ‘std::__hash_enum<KDL::Frame, false>::hash_enum()’ /usr/include/c++/14.2.1/bits/functional_hash.h:83:7: note: candidate: ‘std::hash_enum<_Tp, >::hash_enum(std::hash_enum<_Tp, >&&) [with _Tp = KDL::Frame; bool = false]’ 83 | __hash_enum(hash_enum&&); | ^~~ /usr/include/c++/14.2.1/bits/functional_hash.h:83:7: note: candidate expects 1 argument, 0 provided /usr/include/c++/14.2.1/bits/functional_hash.h:102:12: error: ‘std::hash_enum<_Tp, >::~hash_enum() [with _Tp = KDL::Frame; bool = false]’ is private within this context 102 | struct hash : __hash_enum<_Tp> | ^~~~ /usr/include/c++/14.2.1/bits/functional_hash.h:84:7: note: declared private here 84 | ~__hash_enum(); | ^ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:187:1: note: use ‘-fdiagnostics-all-candidates’ to display considered candidates 187 | PYBIND11_UNARY_OPERATOR(hash, hash, std::hash()(l)) | ^~~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/operators.h: In instantiation of ‘void pybind11::detail::op<id, ot, L, R>::execute(Class&, const Extra& ...) const [with Class = pybind11::class_; Extra = {}; pybind11::detail::op_id id = pybind11::detail::op_hash; pybind11::detail::op_type ot = pybind11::detail::op_u; L = pybind11::detail::self_t; R = pybind11::detail::undefined_t]’: /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11vendor/include/pybind11/pybind11.h:1600:19: required from ‘pybind11::class<type, options>& pybind11::class<type, options>::def(const T&, const Extra& ...) [with T = pybind11::detail::op<pybind11::detail::op_hash, pybind11::detail::op_u, pybind11::detail::self_t, pybind11::detail::undefined_t>; Extra = {}; typename std::enable_if<T::op_enable_ifhook, int>::type = 0; type = KDL::Frame; options = {}]’ 1600 | op.execute(this, extra...); | ~~^~~~~ /home/user/ros/jazzy/build/python_orocos_kdl_vendor/_deps/python_orocos_kdl-src/python_orocos_kdl/PyKDL/frames.cpp:457:14: required from here 457 | frame.def(py::hash(py::self)); | ~~~^~~~~~ /home/user/ros/jazzy/install/pybind11_vendor/opt/pybind11_vendor/include/pybind11/operators.h:94:28: error: ‘execute’ is not a member of ‘op’ {aka ‘pybind11::detail::op_impl<pybind11::detail::op_hash, pybind11::detail::op_u, KDL::Frame, KDL::Frame, pybind11::detail::undefined_t>’} 94 | cl.def(op::name(), &op::execute, is_operator(), extra...); | ^~~~ make[2]: [_deps/python_orocos_kdl-build/CMakeFiles/PyKDL.dir/build.make:90: _deps/python_orocos_kdl-build/CMakeFiles/PyKDL.dir/PyKDL/frames.cpp.o] Error 1 make[1]: [CMakeFiles/Makefile2:152: _deps/python_orocos_kdl-build/CMakeFiles/PyKDL.dir/all] Error 2 make: *** [Makefile:146: all] Error 2

I have made sure to use the pybind11_vendor ros package, not the system install of pybind11 as mentioned in a previous issue, but still get this issue.

clalancette commented 2 months ago

I have made sure to use the pybind11_vendor ros package, not the system install of pybind11 as mentioned in a previous issue, but still get this issue.

This is almost always the cause of this particular problem. Can you give more information on what platform you are compiling on, and the exact commands you used to pull down Jazzy and compile it?

LikeSmith commented 2 months ago

Currently, I am building on archlinux. I install the ros2-arch-deps package, then call rosdep init, rosdep update, then vcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src finally, I call colcon build. The build goes normally until it gets to this package. I checked that it did build the pybind11_vendor package first, and I made sure the the system version of pybind11 is not installed. The files that the error reference are the pybind11_vendor packages that colcon previously built. I also tried in a clean docker container and get the same errors.

changyp6 commented 2 months ago

I have met the same issue in Fedora 39 Linux with GCC 14

changyp6 commented 2 months ago

Revert orocos_kinematics_dynamics back to version 1.5.1 can fix such issue. Because std::hash was not added to PyKDL in version 1.5.1

clalancette commented 2 months ago

Ah yeah, that actually triggers my memory of what the actual problem is.

And that is that the version of orocos_kinematics_dynamics and python_orocos_kinematics_dynamics have to match (either they both have to be from the system, or they both have to be built from the vendor package). My advice is to remove any packages related to orocos_kinematics_dynamics from the system, then try again. It should vendor build orocos_kinematics_dynamics first, then python_orocos_kinematics_dynamics should successfully build.

LikeSmith commented 2 months ago

Turns out I had orocos-kdl from the AUR installed. I uninstalled it and it seems to be working now! Thanks!

changyp6 commented 2 months ago

Ah yeah, that actually triggers my memory of what the actual problem is.

And that is that the version of orocos_kinematics_dynamics and python_orocos_kinematics_dynamics have to match (either they both have to be from the system, or they both have to be built from the vendor package). My advice is to remove any packages related to orocos_kinematics_dynamics from the system, then try again. It should vendor build orocos_kinematics_dynamics first, then python_orocos_kinematics_dynamics should successfully build.

Thanks for the info!! My fedora has installed orocos-kdl-1.5.1, which triggered this issue. After "dnf remove orocos-kdl{,-devel}", everything compiles !

njerig commented 2 weeks ago

I'm getting the same error on macOS. I do not have orocos-kdl or pybind11 already installed in my system before calling colcon build.