|
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/