Hi everyone,

is there currently a solution implemented in uBLAS for the following

problem?

blas::matrix<double> mymat(2,20);

noalias(subrange(row(mymat,0),0,10) = ...;

this will fail as row(mymat,0) returns a temporary object which leads to

subrange being called with something constant, which leads to a constant

object fed to noalias -> compilation fails, this is not possible.

I think that rvalue references in C++11 might be a solution to this as

one can just overload subrange with an rvalue version (i hope, i am not

using C++11 unfortunately). Also there is a slight problem when some

lunatic calls proxies on a temporary container and assigns something to

this. In that case some expressions would happily be compiled even

though it should be a compile error. My current C++03 compatible

solution uses an additional object.

template<class E>

struct temporary_proxy: public E{

temporary_proxy(E& e):E(e){}

};

//and for all proxies i have got three versions

//non-const version

template<class E>

temporary_proxy<my_proxy<E> > my_proxy_creator(vector_expression<E> & e){

return my_proxy<E>(e);

}

//const version

template<class E>

temporary_proxy<my_proxy<E> > my_proxy_creator(vector_expression<E>

const& e){

return my_proxy<E const>(e);

}

//temporary proxy version

template<class E>

temporary_proxy<my_proxy<E> > my_proxy_creator(temporary_proxy<E> e){

return my_proxy_creator(static_cast<E&>(e));

}

using this scheme, the code above happily compiles.

I stumbled into this problem a huge number of times, therefore i came up

with this solution. Is there maybe a better way?

Regards,

Oswin

_______________________________________________

ublas mailing list

[hidden email]
http://lists.boost.org/mailman/listinfo.cgi/ublasSent to:

[hidden email]