
trying to merge boost.heap into trunk, there is one issue, which seems to be triggered by the enable_if in the boost.heap testsuite. compiling with gcc (4.5 or 4.6), i get the following error: In file included from /home/tim/workspace/boost-trunk/boost/parameter.hpp:17:0, from /home/tim/workspace/boost-trunk/boost/heap/policies.hpp:12, from /home/tim/workspace/boost-trunk/boost/heap/detail/stable_heap.hpp:20, from /home/tim/workspace/boost_heap/libs/heap/test/../../../boost/heap/fibonacci_heap.hpp:20, from /home/tim/workspace/boost_heap/libs/heap/test/fibonacci_heap_test.cpp:8: /home/tim/workspace/boost-trunk/boost/parameter/name.hpp:52:1: error: template argument 2 is invalid In file included from /home/tim/workspace/boost-trunk/boost/fusion/support/detail/segmented_fold_until_impl.hpp:20:0, from /home/tim/workspace/boost-trunk/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp:15, from /home/tim/workspace/boost-trunk/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp:10, from /home/tim/workspace/boost-trunk/boost/fusion/sequence/intrinsic/begin.hpp:17, from /home/tim/workspace/boost-trunk/boost/fusion/container/vector/vector10.hpp:15, from /home/tim/workspace/boost-trunk/boost/fusion/container/vector/vector_fwd.hpp:14, from /home/tim/workspace/boost-trunk/boost/fusion/container/vector/vector.hpp:10, from /home/tim/workspace/boost-trunk/boost/fusion/tuple/tuple.hpp:11, from /home/tim/workspace/boost-trunk/boost/fusion/tuple.hpp:10, from /home/tim/workspace/boost-trunk/boost/fusion/include/tuple.hpp:10, from /home/tim/workspace/boost-trunk/boost/math/tools/tuple.hpp:89, from /home/tim/workspace/boost-trunk/boost/math/special_functions/detail/igamma_inverse.hpp:13, from /home/tim/workspace/boost-trunk/boost/math/special_functions/gamma.hpp:1543, from /home/tim/workspace/boost-trunk/boost/math/special_functions/detail/bessel_jy.hpp:14, from /home/tim/workspace/boost-trunk/boost/math/special_functions/bessel.hpp:17, from /home/tim/workspace/boost-trunk/boost/math/special_functions.hpp:18, from /home/tim/workspace/boost-trunk/boost/random/generate_canonical.hpp:22, from /home/tim/workspace/boost-trunk/boost/random.hpp:52, from /home/tim/workspace/boost_heap/libs/heap/test/mutable_heap_tests.hpp:1, from /home/tim/workspace/boost_heap/libs/heap/test/fibonacci_heap_test.cpp:12: /home/tim/workspace/boost-trunk/boost/fusion/iterator/equal_to.hpp:77:9: error: expected nested-name-specifier before ‘enable_if’ /home/tim/workspace/boost-trunk/boost/fusion/iterator/equal_to.hpp:77:18: error: expected initializer before ‘<’ token /home/tim/workspace/boost-trunk/boost/fusion/iterator/equal_to.hpp:88:9: error: expected nested-name-specifier before ‘enable_if’ /home/tim/workspace/boost-trunk/boost/fusion/iterator/equal_to.hpp:88:18: error: expected initializer before ‘<’ token /home/tim/workspace/boost-trunk/boost/fusion/iterator/equal_to.hpp:98:31: error: ‘boost::fusion::iterator_operators::operator==’ has not been declared /home/tim/workspace/boost-trunk/boost/fusion/iterator/equal_to.hpp:99:31: error: ‘boost::fusion::iterator_operators::operator!=’ has not been declared In file included from /home/tim/workspace/boost-trunk/boost/fusion/iterator/segmented_iterator.hpp:13:0, from /home/tim/workspace/boost-trunk/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp:11, from /home/tim/workspace/boost-trunk/boost/fusion/sequence/intrinsic/begin.hpp:17, from /home/tim/workspace/boost-trunk/boost/fusion/container/vector/vector10.hpp:15, from /home/tim/workspace/boost-trunk/boost/fusion/container/vector/vector_fwd.hpp:14, from /home/tim/workspace/boost-trunk/boost/fusion/container/vector/vector.hpp:10, from /home/tim/workspace/boost-trunk/boost/fusion/tuple/tuple.hpp:11, from /home/tim/workspace/boost-trunk/boost/fusion/tuple.hpp:10, from /home/tim/workspace/boost-trunk/boost/fusion/include/tuple.hpp:10, from /home/tim/workspace/boost-trunk/boost/math/tools/tuple.hpp:89, from /home/tim/workspace/boost-trunk/boost/math/special_functions/detail/igamma_inverse.hpp:13, from /home/tim/workspace/boost-trunk/boost/math/special_functions/gamma.hpp:1543, from /home/tim/workspace/boost-trunk/boost/math/special_functions/detail/bessel_jy.hpp:14, from /home/tim/workspace/boost-trunk/boost/math/special_functions/bessel.hpp:17, from /home/tim/workspace/boost-trunk/boost/math/special_functions.hpp:18, from /home/tim/workspace/boost-trunk/boost/random/generate_canonical.hpp:22, from /home/tim/workspace/boost-trunk/boost/random.hpp:52, from /home/tim/workspace/boost_heap/libs/heap/test/mutable_heap_tests.hpp:1, from /home/tim/workspace/boost_heap/libs/heap/test/fibonacci_heap_test.cpp:12: /home/tim/workspace/boost-trunk/boost/fusion/container/list/cons.hpp:91:22: error: expected nested-name-specifier before ‘disable_if’ /home/tim/workspace/boost-trunk/boost/fusion/container/list/cons.hpp:91:32: error: expected ‘,’ or ‘...’ before ‘<’ token /home/tim/workspace/boost-trunk/boost/fusion/container/list/cons.hpp:122:18: error: expected nested-name-specifier before ‘disable_if’ /home/tim/workspace/boost-trunk/boost/fusion/container/list/cons.hpp:122:28: error: expected initializer before ‘<’ token compiling with gcc against 1.48 works fine. clang++ correctly compiles this code against boost-trunk. any idea, what could go wrong there? thanks, tim

On 12/05/2011 01:36 PM, Tim Blechmann wrote:
/home/tim/workspace/boost-trunk/boost/parameter/name.hpp:52:1: error: template argument 2 is invalid
Note this is the first error, and that's unrelated to enable_if.
/home/tim/workspace/boost-trunk/boost/fusion/iterator/equal_to.hpp:77:9: error: expected nested-name-specifier before ‘enable_if’
This message says a declaration of enable_if is missing. Either it's not properly qualified, or equal_to.hpp is not including it and was relying on other files to include it, which of course is very fragile. (missing includes is a very common bug in many Boost libraries though)

/home/tim/workspace/boost-trunk/boost/parameter/name.hpp:52:1: error: template argument 2 is invalid Note this is the first error, and that's unrelated to enable_if.
not quite: the second template argument which gcc complains about is an enable_if ...
/home/tim/workspace/boost-trunk/boost/fusion/iterator/equal_to.hpp:77:9: error: expected nested-name-specifier before ‘enable_if’ This message says a declaration of enable_if is missing. Either it's not properly qualified, or equal_to.hpp is not including it and was relying on other files to include it, which of course is very fragile. (missing includes is a very common bug in many Boost libraries though)
ok, there are some references to en/disable_if, which do not use the full namespace. i've submitted two patches to parameter and fusion [1,2], but there are possibly more issues. tim [1] https://svn.boost.org/trac/boost/ticket/6214 [2] https://svn.boost.org/trac/boost/ticket/6215
participants (2)
-
Mathias Gaunard
-
Tim Blechmann