Boost logo

Boost :

From: Joel Young (jdy_at_[hidden])
Date: 2004-04-29 12:17:57


From: "Richard Peters" <r.a.peters_at_[hidden]>
> "Thorsten Ottosen" <nesotto_at_[hidden]> wrote in message
> news:c6quof$dtl$1_at_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/////////////////////////////////


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk