KCL-Planning / SMTPlan

PDDL+ planning through compilation to SMT
44 stars 19 forks source link

build failure on FreeBSD, gcc9 #8

Open ko56 opened 4 years ago

ko56 commented 4 years ago

Hi, I am trying to build SMTPlan on FreeBSD 12.1, gcc9, cmake 3.15.5, boost 1.72, piranha 0.11_7.

This is what happens:

[ 50%] Building CXX object CMakeFiles/SMTPlan.dir/src/VALfiles/src/SimpleEval.cpp.o [ 56%] Building CXX object CMakeFiles/SMTPlan.dir/src/VALfiles/src/TIM.cpp.o [ 62%] Building CXX object CMakeFiles/SMTPlan.dir/src/VALfiles/src/TimSupport.cpp.o In file included from /usr/local/lib/gcc9/include/c++/set:62, from /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/TimSupport.h:32, from /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/src/TimSupport.cpp:28: /usr/local/lib/gcc9/include/c++/bits/stl_multiset.h: In instantiation of 'std::multiset<_Key, _Compare, _Alloc>::multiset(_InputIterator, _InputIterator) [with _InputIterator = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >; _Key = TIM::Property*; _Compare = std::less<TIM::Property*>; _Alloc = std::allocator<TIM::Property*>]': /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/TimSupport.h:273:67: required from 'TIM::PropertyState::PropertyState(TIM::TIMAnalyser*, TI, TI) [with TI = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >]' /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/TimSupport.h:281:9: required from 'static TIM::PropertyState* TIM::PropertyState::retrieve(TIM::TIMAnalyser*, TI, TI) [with TI = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >]' /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/src/TimSupport.cpp:1392:36: required from here /usr/local/lib/gcc9/include/c++/bits/stl_multiset.h:189:4: error: no matching function for call to 'std::_Rb_tree<TIM::Property*, TIM::Property*, std::_Identity<TIM::Property*>, std::less<TIM::Property*>, std::allocator<TIM::Property*> >::_M_insert_range_equal(TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >&, TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >&)' 189 | { _M_t._M_insert_range_equal(__first, __last); } | ^~~~ In file included from /usr/local/lib/gcc9/include/c++/map:60, from /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/ptree.h:55, from /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/FastEnvironment.h:36, from /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/src/TimSupport.cpp:27: /usr/local/lib/gcc9/include/c++/bits/stl_tree.h:1126:2: note: candidate: 'template<class _InputIterator> std::__enable_if_t<std::is_same<_Val, typename std::iterator_traits<_InputIterator>::value_type>::value> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_range_equal(_InputIterator, _InputIterator) [with _InputIterator = _InputIterator; _Key = TIM::Property*; _Val = TIM::Property*; _KeyOfValue = std::_Identity<TIM::Property*>; _Compare = std::less<TIM::Property*>; _Alloc = std::allocator<TIM::Property*>]' 1126 | _M_insert_range_equal(_InputIterator __first, _InputIterator __last) | ^~~~~~~~~~~~~~~~~~~~~ /usr/local/lib/gcc9/include/c++/bits/stl_tree.h:1126:2: note: template argument deduction/substitution failed: /usr/local/lib/gcc9/include/c++/bits/stl_tree.h: In substitution of 'template<class _InputIterator> std::__enable_if_t<std::is_same<TIM::Property*, typename std::iterator_traits<_Iterator>::value_type>::value, void> std::_Rb_tree<TIM::Property*, TIM::Property*, std::_Identity<TIM::Property*>, std::less<TIM::Property*>, std::allocator<TIM::Property*> >::_M_insert_range_equal<_InputIterator>(_InputIterator, _InputIterator) [with _InputIterator = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >]': /usr/local/lib/gcc9/include/c++/bits/stl_multiset.h:189:4: required from 'std::multiset<_Key, _Compare, _Alloc>::multiset(_InputIterator, _InputIterator) [with _InputIterator = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >; _Key = TIM::Property*; _Compare = std::less<TIM::Property*>; _Alloc = std::allocator<TIM::Property*>]' /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/TimSupport.h:273:67: required from 'TIM::PropertyState::PropertyState(TIM::TIMAnalyser*, TI, TI) [with TI = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >]' /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/TimSupport.h:281:9: required from 'static TIM::PropertyState* TIM::PropertyState::retrieve(TIM::TIMAnalyser*, TI, TI) [with TI = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >]' /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/src/TimSupport.cpp:1392:36: required from here /usr/local/lib/gcc9/include/c++/bits/stl_tree.h:1126:2: error: no type named 'value_type' in 'struct std::iterator_traits<TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> > >' /usr/local/lib/gcc9/include/c++/bits/stl_multiset.h: In instantiation of 'std::multiset<_Key, _Compare, _Alloc>::multiset(_InputIterator, _InputIterator) [with _InputIterator = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >; _Key = TIM::Property*; _Compare = std::less<TIM::Property*>; _Alloc = std::allocator<TIM::Property*>]': /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/TimSupport.h:273:67: required from 'TIM::PropertyState::PropertyState(TIM::TIMAnalyser*, TI, TI) [with TI = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >]' /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/TimSupport.h:281:9: required from 'static TIM::PropertyState* TIM::PropertyState::retrieve(TIM::TIMAnalyser*, TI, TI) [with TI = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >]' /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/src/TimSupport.cpp:1392:36: required from here /usr/local/lib/gcc9/include/c++/bits/stl_tree.h:1135:2: note: candidate: 'template<class _InputIterator> std::__enable_if_t<(! std::is_same<_Val, typename std::iterator_traits<_InputIterator>::value_type>::value)> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_range_equal(_InputIterator, _InputIterator) [with _InputIterator = _InputIterator; _Key = TIM::Property*; _Val = TIM::Property*; _KeyOfValue = std::_Identity<TIM::Property*>; _Compare = std::less<TIM::Property*>; _Alloc = std::allocator<TIM::Property*>]' 1135 | _M_insert_range_equal(_InputIterator __first, _InputIterator __last) | ^~~~~~~~~~~~~~~~~~~~~ /usr/local/lib/gcc9/include/c++/bits/stl_tree.h:1135:2: note: template argument deduction/substitution failed: /usr/local/lib/gcc9/include/c++/bits/stl_tree.h: In substitution of 'template<class _InputIterator> std::__enable_if_t<(! std::is_same<TIM::Property*, typename std::iterator_traits<_Iterator>::value_type>::value), void> std::_Rb_tree<TIM::Property*, TIM::Property*, std::_Identity<TIM::Property*>, std::less<TIM::Property*>, std::allocator<TIM::Property*> >::_M_insert_range_equal<_InputIterator>(_InputIterator, _InputIterator) [with _InputIterator = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >]': /usr/local/lib/gcc9/include/c++/bits/stl_multiset.h:189:4: required from 'std::multiset<_Key, _Compare, _Alloc>::multiset(_InputIterator, _InputIterator) [with _InputIterator = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >; _Key = TIM::Property*; _Compare = std::less<TIM::Property*>; _Alloc = std::allocator<TIM::Property*>]' /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/TimSupport.h:273:67: required from 'TIM::PropertyState::PropertyState(TIM::TIMAnalyser*, TI, TI) [with TI = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >]' /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/include/TimSupport.h:281:9: required from 'static TIM::PropertyState* TIM::PropertyState::retrieve(TIM::TIMAnalyser*, TI, TI) [with TI = TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> >]' /usr/home/ko/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/src/VALfiles/src/TimSupport.cpp:1392:36: required from here /usr/local/lib/gcc9/include/c++/bits/stl_tree.h:1117:16: error: no type named 'value_type' in 'struct std::iterator_traits<TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> > >' 1117 | __enable_if_t<!__same_value_type<_InputIterator>::value> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gmake[2]: *** [CMakeFiles/SMTPlan.dir/build.make:180: CMakeFiles/SMTPlan.dir/src/VALfiles/src/TimSupport.cpp.o] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/SMTPlan.dir/all] Error 2 gmake: *** [Makefile:130: all] Error 2 [ko@kzin ~/build/KCL-Planning-SMTPlan-edda8a8/SMTPlan/build]$

C++ is not my strong point. Your help would be appreciated.

jbalint commented 2 years ago

The salient error is:

/usr/local/lib/gcc9/include/c++/bits/stl_tree.h:1126:2: error: no type named 'value_type' in
'struct std::iterator_traits<TIM::getConditionally<std::_Rb_tree_const_iterator<TIM::Property*> > >'

Adding the following to the end of TimSupport.cpp should fix it:

namespace std {
template <typename TI> struct iterator_traits<TIM::getConditionally<TI>> {
  typedef typename TI::value_type value_type;
};
} // namespace std