Skip to content
Prev 2459 / 10988 Next

[Rcpp-devel] Strange compiler error when using boost uBLAS on Ubuntu 11.04

Sorry to take so long to respond.
On Sat, Jun 4, 2011 at 12:26 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
I did so. Trying to compile the example section of
http://www.boost.org/doc/libs/1_46_1/libs/numeric/ublas/doc/matrix_sparse.htm#coordinate_matrix

produces


$ g++ -O3 -g0 foo.cpp -o foo
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 foo.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>
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>
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>]?
foo.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> > > >]?

which answers one of my original questions about the trailing '/usr'.
It resulted from truncation of the messages.

Strangely I can't find other reports of this problem on the ublas or
ubuntu lists.