
From: "Richard Peters" <r.a.peters@student.tue.nl>
"Thorsten Ottosen" <nesotto@cs.auc.dk> wrote in message news:c6quof$dtl$1@sea.gmane.org...
I have some questions. Will it be possible to say
1. typedef boost::rational< big_integer > big_rational.
Yes. In fact, the big_integer_example contains an example where boost::rational<big_integer> is used.
I have not had success using big_integer inside rational. I get concept check errors with the test code below. /////////////////////// jyoung.1133 ==> g++ --version g++ (GCC) 3.3.2 20031022 (Red Hat Linux 3.3.2-1) Copyright (C) 2003 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. /////////////////////// I'm not sure if this is a problem with big_integer, rational, or multi_array. The below code works with boost::rational<long long>, double, and CLN's rational type, and even boost::rational<cln::cl_I>. I have other issues with using cl_I with boost::rational as cl_I doesn't implement all the operators, but thats not the trouble here. Joel //////////////////////////////CUT HERE///////////////////////////////// #include <cln/integer.h> #include <cln/rational.h> #include "boost/big_integer.hpp" #include "boost/multi_array.hpp" #include "boost/rational.hpp" // Works: //typedef double data_t; // // Works: //typedef boost::rational<long long> data_t; // // Doesn't Work: typedef boost::rational<boost::big_integer> data_t; // // Works: //typedef cln::cl_RA data_t; // // Main Program int main(int argc, char* argv[]) { data_t dx; data_t dt; data_t a; typedef boost::multi_array<data_t, 2> array_type; boost::array<array_type::index, 2> u_dim; array_type u(u_dim); typedef array_type::index_range range; typedef array_type::array_view<1>::type view_t; typedef boost::multi_array<data_t, 2> tri_diag_array_t; tri_diag_array_t A(boost::extents[3][10]); view_t x = u[ boost::indices[range()][15+1] ]; view_t b = u[ boost::indices[range()][15] ]; typedef boost::multi_array<data_t, 1> vector_type; vector_type d(boost::extents[10]); d = A[boost::indices[1][range()]]; } //////////////////////////////CUT HERE///////////////////////////////// The error looks like: //////////////////////////////CUT HERE///////////////////////////////// /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp: In member function `void boost::EqualityComparableConcept<TT>::constraints() [with TT = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>]': /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost::EqualityComparableConcept<boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/iterator/iterator_concepts.hpp:147: instantiated from `void boost_concepts::SinglePassIteratorConcept<Iterator>::constraints() [with Iterator = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost_concepts::SinglePassIteratorConcept<boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/iterator/iterator_concepts.hpp:165: instantiated from `void boost_concepts::ForwardTraversalConcept<Iterator>::constraints() [with Iterator = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost_concepts::ForwardTraversalConcept<boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array/concept_checks.hpp:65: instantiated from `void boost::detail::multi_array::ConstMultiArrayConcept<Array, NumDims>::constraints() [with Array = boost::detail::multi_array::multi_array_view<data_t, 1>, unsigned int NumDims = 1]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost::detail::multi_array::ConstMultiArrayConcept<boost::detail::multi_array::multi_array_view<data_t, 1>, 1>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array/multi_array_ref.hpp:470: instantiated from `boost::multi_array_ref<T, NumDims>& boost::multi_array_ref<T, NumDims>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::detail::multi_array::multi_array_view<data_t, 1>, T = data_t, unsigned int NumDims = 1]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array.hpp:174: instantiated from `boost::multi_array<T, NumDims, Allocator>& boost::multi_array<T, NumDims, Allocator>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::detail::multi_array::multi_array_view<data_t, 1>, T = data_t, unsigned int NumDims = 1, Allocator = std::allocator<data_t>]' b.cpp:53: instantiated from here /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:305: error: ISO C++ says that `typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type boost::operator==(const boost::iterator_facade<Derived1, V1, TC1, R1, D1>&, const boost::iterator_facade<Derived2, V2, TC2, R2, D2>&) [with Derived1 = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, V1 = data_t, TC1 = boost::random_access_traversal_tag, R1 = data_t&, D1 = ptrdiff_t, Derived2 = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, V2 = data_t, TC2 = boost::random_access_traversal_tag, R2 = data_t&, D2 = ptrdiff_t]' and `bool boost::expression::operator==(T, const boost::expression::expression<Base>&) [with T = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, Base = boost::expression::post_increment]' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:305: error: ISO C++ says that `typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type boost::operator==(const boost::iterator_facade<Derived1, V1, TC1, R1, D1>&, const boost::iterator_facade<Derived2, V2, TC2, R2, D2>&) [with Derived1 = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, V1 = data_t, TC1 = boost::random_access_traversal_tag, R1 = data_t&, D1 = ptrdiff_t, Derived2 = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, V2 = data_t, TC2 = boost::random_access_traversal_tag, R2 = data_t&, D2 = ptrdiff_t]' and `bool boost::expression::operator==(T, const boost::expression::expression<Base>&) [with T = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, Base = boost::expression::post_decrement]' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost::EqualityComparableConcept<boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/iterator/iterator_concepts.hpp:147: instantiated from `void boost_concepts::SinglePassIteratorConcept<Iterator>::constraints() [with Iterator = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost_concepts::SinglePassIteratorConcept<boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/iterator/iterator_concepts.hpp:165: instantiated from `void boost_concepts::ForwardTraversalConcept<Iterator>::constraints() [with Iterator = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost_concepts::ForwardTraversalConcept<boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array/concept_checks.hpp:65: instantiated from `void boost::detail::multi_array::ConstMultiArrayConcept<Array, NumDims>::constraints() [with Array = boost::detail::multi_array::multi_array_view<data_t, 1>, unsigned int NumDims = 1]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost::detail::multi_array::ConstMultiArrayConcept<boost::detail::multi_array::multi_array_view<data_t, 1>, 1>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array/multi_array_ref.hpp:470: instantiated from `boost::multi_array_ref<T, NumDims>& boost::multi_array_ref<T, NumDims>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::detail::multi_array::multi_array_view<data_t, 1>, T = data_t, unsigned int NumDims = 1]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array.hpp:174: instantiated from `boost::multi_array<T, NumDims, Allocator>& boost::multi_array<T, NumDims, Allocator>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::detail::multi_array::multi_array_view<data_t, 1>, T = data_t, unsigned int NumDims = 1, Allocator = std::allocator<data_t>]' b.cpp:53: instantiated from here /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:306: error: ISO C++ says that `typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type boost::operator!=(const boost::iterator_facade<Derived1, V1, TC1, R1, D1>&, const boost::iterator_facade<Derived2, V2, TC2, R2, D2>&) [with Derived1 = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, V1 = data_t, TC1 = boost::random_access_traversal_tag, R1 = data_t&, D1 = ptrdiff_t, Derived2 = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, V2 = data_t, TC2 = boost::random_access_traversal_tag, R2 = data_t&, D2 = ptrdiff_t]' and `bool boost::expression::operator!=(T, const boost::expression::expression<Base>&) [with T = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, Base = boost::expression::post_increment]' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:306: error: ISO C++ says that `typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type boost::operator!=(const boost::iterator_facade<Derived1, V1, TC1, R1, D1>&, const boost::iterator_facade<Derived2, V2, TC2, R2, D2>&) [with Derived1 = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, V1 = data_t, TC1 = boost::random_access_traversal_tag, R1 = data_t&, D1 = ptrdiff_t, Derived2 = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, V2 = data_t, TC2 = boost::random_access_traversal_tag, R2 = data_t&, D2 = ptrdiff_t]' and `bool boost::expression::operator!=(T, const boost::expression::expression<Base>&) [with T = boost::detail::multi_array::array_iterator<data_t, data_t*, boost::mpl::size_t<1>, data_t&>, Base = boost::expression::post_decrement]' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp: In member function `void boost::EqualityComparableConcept<TT>::constraints() [with TT = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>]': /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost::EqualityComparableConcept<boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/iterator/iterator_concepts.hpp:147: instantiated from `void boost_concepts::SinglePassIteratorConcept<Iterator>::constraints() [with Iterator = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost_concepts::SinglePassIteratorConcept<boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/iterator/iterator_concepts.hpp:165: instantiated from `void boost_concepts::ForwardTraversalConcept<Iterator>::constraints() [with Iterator = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost_concepts::ForwardTraversalConcept<boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array/concept_checks.hpp:67: instantiated from `void boost::detail::multi_array::ConstMultiArrayConcept<Array, NumDims>::constraints() [with Array = boost::detail::multi_array::multi_array_view<data_t, 1>, unsigned int NumDims = 1]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost::detail::multi_array::ConstMultiArrayConcept<boost::detail::multi_array::multi_array_view<data_t, 1>, 1>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array/multi_array_ref.hpp:470: instantiated from `boost::multi_array_ref<T, NumDims>& boost::multi_array_ref<T, NumDims>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::detail::multi_array::multi_array_view<data_t, 1>, T = data_t, unsigned int NumDims = 1]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array.hpp:174: instantiated from `boost::multi_array<T, NumDims, Allocator>& boost::multi_array<T, NumDims, Allocator>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::detail::multi_array::multi_array_view<data_t, 1>, T = data_t, unsigned int NumDims = 1, Allocator = std::allocator<data_t>]' b.cpp:53: instantiated from here /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:305: error: ISO C++ says that `typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type boost::operator==(const boost::iterator_facade<Derived1, V1, TC1, R1, D1>&, const boost::iterator_facade<Derived2, V2, TC2, R2, D2>&) [with Derived1 = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, V1 = data_t, TC1 = boost::random_access_traversal_tag, R1 = const data_t&, D1 = ptrdiff_t, Derived2 = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, V2 = data_t, TC2 = boost::random_access_traversal_tag, R2 = const data_t&, D2 = ptrdiff_t]' and `bool boost::expression::operator==(T, const boost::expression::expression<Base>&) [with T = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, Base = boost::expression::post_increment]' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:305: error: ISO C++ says that `typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type boost::operator==(const boost::iterator_facade<Derived1, V1, TC1, R1, D1>&, const boost::iterator_facade<Derived2, V2, TC2, R2, D2>&) [with Derived1 = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, V1 = data_t, TC1 = boost::random_access_traversal_tag, R1 = const data_t&, D1 = ptrdiff_t, Derived2 = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, V2 = data_t, TC2 = boost::random_access_traversal_tag, R2 = const data_t&, D2 = ptrdiff_t]' and `bool boost::expression::operator==(T, const boost::expression::expression<Base>&) [with T = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, Base = boost::expression::post_decrement]' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost::EqualityComparableConcept<boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/iterator/iterator_concepts.hpp:147: instantiated from `void boost_concepts::SinglePassIteratorConcept<Iterator>::constraints() [with Iterator = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost_concepts::SinglePassIteratorConcept<boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/iterator/iterator_concepts.hpp:165: instantiated from `void boost_concepts::ForwardTraversalConcept<Iterator>::constraints() [with Iterator = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost_concepts::ForwardTraversalConcept<boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&> >]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array/concept_checks.hpp:67: instantiated from `void boost::detail::multi_array::ConstMultiArrayConcept<Array, NumDims>::constraints() [with Array = boost::detail::multi_array::multi_array_view<data_t, 1>, unsigned int NumDims = 1]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:49: instantiated from `void boost::function_requires(boost::mpl::identity<T>*) [with Concept = boost::detail::multi_array::ConstMultiArrayConcept<boost::detail::multi_array::multi_array_view<data_t, 1>, 1>]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array/multi_array_ref.hpp:470: instantiated from `boost::multi_array_ref<T, NumDims>& boost::multi_array_ref<T, NumDims>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::detail::multi_array::multi_array_view<data_t, 1>, T = data_t, unsigned int NumDims = 1]' /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/multi_array.hpp:174: instantiated from `boost::multi_array<T, NumDims, Allocator>& boost::multi_array<T, NumDims, Allocator>::operator=(const ConstMultiArray&) [with ConstMultiArray = boost::detail::multi_array::multi_array_view<data_t, 1>, T = data_t, unsigned int NumDims = 1, Allocator = std::allocator<data_t>]' b.cpp:53: instantiated from here /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:306: error: ISO C++ says that `typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type boost::operator!=(const boost::iterator_facade<Derived1, V1, TC1, R1, D1>&, const boost::iterator_facade<Derived2, V2, TC2, R2, D2>&) [with Derived1 = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, V1 = data_t, TC1 = boost::random_access_traversal_tag, R1 = const data_t&, D1 = ptrdiff_t, Derived2 = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, V2 = data_t, TC2 = boost::random_access_traversal_tag, R2 = const data_t&, D2 = ptrdiff_t]' and `bool boost::expression::operator!=(T, const boost::expression::expression<Base>&) [with T = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, Base = boost::expression::post_increment]' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter /home/afit1/fac/jyoung/boost/boost/include/boost-1_31/boost/concept_check.hpp:306: error: ISO C++ says that `typename boost::mpl::apply2<boost::detail::always_bool2, Derived1, Derived2>::type boost::operator!=(const boost::iterator_facade<Derived1, V1, TC1, R1, D1>&, const boost::iterator_facade<Derived2, V2, TC2, R2, D2>&) [with Derived1 = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, V1 = data_t, TC1 = boost::random_access_traversal_tag, R1 = const data_t&, D1 = ptrdiff_t, Derived2 = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, V2 = data_t, TC2 = boost::random_access_traversal_tag, R2 = const data_t&, D2 = ptrdiff_t]' and `bool boost::expression::operator!=(T, const boost::expression::expression<Base>&) [with T = boost::detail::multi_array::array_iterator<data_t, const data_t*, boost::mpl::size_t<1>, const data_t&>, Base = boost::expression::post_decrement]' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter ///////////////////////////// CUT HERE/////////////////////////////////