Hi Andreas,

This problem do neither comes from Rheolef-6.7 nor from CGAL-4.11:
it comes from Boost-1.62 combined with g++ 7.2 in Debian sid and testing.

The bug has already be identified in the upstream version of Boost :
  https://svn.boost.org/trac10/ticket/12534
and it is now fixed in the upstream version Boost-1.65:
  
https://github.com/boostorg/container/commit/5e4a107e82ab3281688311d22d2bfc2fddcf84a3
but this version is not yet available in Debian.

I've just send a bug report to the Boost package, together with a patch for 
Boost-1.62
and later, until we will get Boost-1.65 in Debian.

See also in attachment for a small test "pair_tst.cc" and the corresponding 
Boost patch "pair_tst.patch"

I hope it will be fixed soon.

Best regards,

Pierre
--
pierre.saram...@imag.fr
Directeur de Recherche CNRS
Laboratoire Jean Kuntzmann, Grenoble, France
http://ljk.imag.fr/membres/Pierre.Saramito
// bug description
// https://svn.boost.org/trac10/ticket/12534
// and its fix in boost-dev 1.65:
// https://github.com/boostorg/container/commit/5e4a107e82ab3281688311d22d2bfc2fddcf84a3
// i.e. remove from line 431 to 460 in include/boost/container/detail/pair.hpp

#undef FIX_BUG
#ifdef  FIX_BUG
#include <boost/container/map.hpp>
#endif // FIX_BUG

#include <boost/type_traits.hpp>

static const bool is_enum = boost::is_enum<std::pair<int, int> >::value;

#include <boost/container/flat_map.hpp>

boost::container::flat_map<int, int> m;

int main() {}
*** /usr/include/boost/container/detail/pair.hpp.orig	Tue Dec 12 12:15:26 2017
--- /usr/include/boost/container/detail/pair.hpp	Tue Dec 12 12:41:22 2017
***************
*** 416,451 ****
  }  //namespace container_detail {
  }  //namespace container {
  
- 
- //Without this specialization recursive flat_(multi)map instantiation fails
- //because is_enum needs to instantiate the recursive pair, leading to a compilation error).
- //This breaks the cycle clearly stating that pair is not an enum avoiding any instantiation.
- template<class T>
- struct is_enum;
- 
- template<class T, class U>
- struct is_enum< ::boost::container::container_detail::pair<T, U> >
- {
-    static const bool value = false;
- };
- 
- template<class T, class U>
- struct is_enum< ::std::pair<T, U> >
- {
-    static const bool value = false;
- };
- 
- template <class T>
- struct is_class;
- 
- //This specialization is needed to avoid instantiation of pair in
- //is_class, and allow recursive maps.
- template <class T1, class T2>
- struct is_class< ::boost::container::container_detail::pair<T1, T2> >
- {
-    static const bool value = true;
- };
- 
  #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
  
  template<class T1, class T2>
--- 416,421 ----

Reply via email to