|
Boost Users : |
From: jhr.walter_at_[hidden]
Date: 2003-04-08 03:47:03
Hi Kresimir,
you wrote:
> >>question is the following: Is it intentional, that it
> >>is not possible to compile:
> >>
> >>#include <boost/numeric/ublas/matrix.hpp>
> >>#include <boost/numeric/ublas/io.hpp>
> >>
> >>int main () {
> >> using namespace boost::numeric::ublas;
> >> matrix<double> m (4, 4);
> >> for (unsigned int i = 0; i < m.size1 (); ++ i)
> >> for (unsigned int j = 0; j < m.size2 (); ++ j)
> >> m(i, j) = 4*i+j;
> >>
> >> std::cout << m << std::endl;
> >>
> >> swap(row(m,0), row(m,2));
> >>
> >> std::cout << m << std::endl;
> >>}
> >
> > No. This one compiles with ICC 7.0 and fails with GCC 3.2.1.
>
> It also fails with como. As it should.
Thanks for checking that!
> This is the old problem of binding references to temporaries:
> parameters of `swap()' are *non-const* references, and they
> cannot be bound to temporaries returned by `row()'.
>
> It seems that `project()' raises its ugly head again :o(
Not sure about that. Maybe swap()'s signatures are inadequate for the view
classes. If I change matrix_row<>'s swap() member signatures from
void swap (matrix_row &mr);
friend void swap (matrix_row &mr1, matrix_row &mr2);
to
void swap (matrix_row mr);
friend void swap (matrix_row mr1, matrix_row mr2);
the following test program compiles on GCC 3.2.1 and Intel 7.0:
----------
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
using namespace boost::numeric::ublas;
matrix<double> m (4, 4);
for (unsigned int i = 0; i < m.size1 (); ++ i)
for (unsigned int j = 0; j < m.size2 (); ++ j)
m(i, j) = 4*i+j;
std::cout << m << std::endl;
swap(row(m,0), row(m,2));
row(m,0).swap(row(m,2));
swap(m.row(0), m.row(2));
m.row(0).swap(m.row(2));
matrix_row<matrix<double> > r1(m, 0), r2(m, 2);
swap(r1, r2);
r1.swap(r2);
std::cout << m << std::endl;
}
----------
Interestingly enough, the same doesn't hold for 'const matrix_row &' instead
;-) I've already corrected swap() members for all view classes and intend to
upload my current version after some regression testing.
Thanks again,
Joerg
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net