Boost logo

Ublas :

Subject: [ublas] gcc 4.5 fails compiling simple example
From: Nuno Sucena Almeida (slug_at_[hidden])
Date: 2011-07-15 14:27:27


Hi,
        I'm trying to compile this simple example:

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    coordinate_matrix<double> m (3, 3, 3 * 3);
    for (unsigned i = 0; i < m.size1 (); ++ i)
        for (unsigned j = 0; j < m.size2 (); ++ j)
            m (i, j) = 3 * i + j;
    std::cout << m << std::endl;
}

with gcc 4.4 and boost 1.47.0 it works fine:

~$ g++-4.4 -I /opt/boost/1.47.0/ ublas_1.cpp

but with gcc 4.5 it fails:

~$ g++-4.5 -I /opt/boost/1.47.0/ ublas_1.cpp

Any suggestions? Thanks,
                        Nuno

In file included from /usr/include/c++/4.5/bits/stl_algo.h:63:0,
                 from /usr/include/c++/4.5/algorithm:63,
                 from /usr/include/boost/utility/swap.hpp:24,
                 from /usr/include/boost/swap.hpp:10,
                 from /usr/include/boost/array.hpp:37,
                 from /usr/include/boost/serialization/array.hpp:26,
                 from /usr/include/boost/numeric/ublas/storage_sparse.hpp:19,
                 from /usr/include/boost/numeric/ublas/vector_sparse.hpp:16,
                 from /usr/include/boost/numeric/ublas/matrix_sparse.hpp:16,
                 from ublas_1.cpp:1:
/usr/include/c++/4.5/bits/stl_tempbuf.h: In constructor ‘std::_Temporary_buffer<_ForwardIterator, _Tp>::_Temporary_buffer(_ForwardIterator, _ForwardIterator) [with _ForwardIterator = boost::numeric::ublas::indexed_iterator<boost::numeric::ublas::index_triple_array<boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >, std::random_access_iterator_tag>, _Tp = boost::numeric::ublas::index_triple<boost::numeric::ublas::index_triple_array<boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > > >]’:
/usr/include/c++/4.5/bits/stl_algo.h:3084:17: instantiated from ‘void std::inplace_merge(_BIter, _BIter, _BIter) [with _BIter = boost::numeric::ublas::indexed_iterator<boost::numeric::ublas::index_triple_array<boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >, std::random_access_iterator_tag>]’
/usr/include/boost/numeric/ublas/matrix_sparse.hpp:4387:17: instantiated from ‘void boost::numeric::ublas::coordinate_matrix<T, L, IB, IA, TA>::sort() const [with T = double, L = boost::numeric::ublas::basic_row_major<>, long unsigned int IB = 0ul, IA = boost::numeric::ublas::unbounded_array<long unsigned int>, TA = boost::numeric::ublas::unbounded_array<double, std::allocator<double> >]’
/usr/include/boost/numeric/ublas/matrix_sparse.hpp:4174:13: instantiated from ‘const T* boost::numeric::ublas::coordinate_matrix<T, L, IB, IA, TA>::find_element(boost::numeric::ublas::coordinate_matrix<T, L, IB, IA, TA>::size_type, boost::numeric::ublas::coordinate_matrix<T, L, IB, IA, TA>::size_type) const [with T = double, L = boost::numeric::ublas::basic_row_major<>, long unsigned int IB = 0ul, IA = boost::numeric::ublas::unbounded_array<long unsigned int>, TA = boost::numeric::ublas::unbounded_array<double, std::allocator<double> >, const T* = const double*, boost::numeric::ublas::coordinate_matrix<T, L, IB, IA, TA>::size_type = long unsigned int]’
/usr/include/boost/numeric/ublas/matrix_sparse.hpp:4192:49: instantiated from ‘const T& boost::numeric::ublas::coordinate_matrix<T, L, IB, IA, TA>::operator()(boost::numeric::ublas::coordinate_matrix<T, L, IB, IA, TA>::size_type, boost::numeric::ublas::coordinate_matrix<T, L, IB, IA, TA>::size_type) const [with T = double, L = boost::numeric::ublas::basic_row_major<>, long unsigned int IB = 0ul, IA = boost::numeric::ublas::unbounded_array<long unsigned int>, TA = boost::numeric::ublas::unbounded_array<double, std::allocator<double> >, const T& = const double&, boost::numeric::ublas::coordinate_matrix<T, L, IB, IA, TA>::size_type = long unsigned int]’
/usr/include/boost/numeric/ublas/io.hpp:96:17: instantiated from ‘std::basic_ostream<_CharT, _Traits>& boost::numeric::ublas::operator<<(std::basic_ostream<_CharT, _Traits>&, const boost::numeric::ublas::matrix_expression<E2>&) [with E = char, T = std::char_traits<char>, ME = boost::numeric::ublas::coordinate_matrix<double>]’
ublas_1.cpp:10:18: instantiated from here
/usr/include/c++/4.5/bits/stl_tempbuf.h:192:6: error: invalid initialization of non-const reference of type ‘boost::numeric::ublas::index_triple<boost::numeric::ublas::index_triple_array<boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > > >&’ from an rvalue of type ‘boost::numeric::ublas::indexed_iterator<boost::numeric::ublas::index_triple_array<boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >, std::random_access_iterator_tag>::reference’
/usr/include/c++/4.5/bits/stl_uninitialized.h:223:5: error: in passing argument 3 of ‘void std::__uninitialized_construct_range(_ForwardIterator, _ForwardIterator, _Tp&) [with _ForwardIterator = boost::numeric::ublas::index_triple<boost::numeric::ublas::index_triple_array<boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > > >*, _Tp = boost::numeric::ublas::index_triple<boost::numeric::ublas::index_triple_array<boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<long unsigned int>, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > > >]’

-- 
http://aeminium.org/slug/