Boost logo

Ublas :

From: Michael Stevens (mail_at_[hidden])
Date: 2005-02-13 08:21:17

Hi Karl,
On Friday 11 February 2005 11:35, Karl Meerbergen wrote:
> Michael Stevens wrote:
> >I am a bit confused regarding the new 'remove_const' logic in "triangular"
> >however. I have a couple of questions regarding this.
> >a) Why is it necessary? I don't see how the 'const'ness of M can prorogate
> >into _temporary_type.
> >If is is necessary
> >b) Is it only necessary for traingular_adaptors?
> >c) Should it not go into "temporary.hpp"
> >
> The remove_const is required when M is a const type. For const types the
> temporary_traits are not defined.

Do you have a specific example of when you see such behaviour? After thinking
about the code and try a test case I don't believe this to be the case.
The following simple test case illustrates what I am thinking about
   typedef matrix<float> matrix_type ;
   matrix_type h( 1, 1 );
   matrix_temporary_traits<symmetric_adaptor<const matrix_type, upper> >::type
   tsa(0,0) = 1;
This compiles fine even though symmetric_adaptor does not have remove_const
code. Why this is follows from the following cascade of definitions:

matrix_temporary_traits<symmetric_adaptor<const matrix_type, upper> >::type
 := matrix_temporary_traits< const matrix_type > ::type
 := const!matrix_type::matrix_temporary_type
 := const!matrix_type::self_type
 := matrix<T, L, A>

I use the notation const!matrix_type to represent the type that matches
<const matrix_type>. This type is in fact matrix_type, although the
distinction does not effect the rest of the analysis. The last step is
critical as a Containers self_type should never be const.


Michael Stevens Systems Engineering
Navigation Systems, Estimation  and
                 Bayesian Filtering