gsl_vector_const_view: pointer to constant or constant pointer

Fleur Kelpin fleur@bio.vu.nl
Fri Aug 9 21:20:00 GMT 2002


Hi all!

Compiling

#include <gsl/gsl_vector.h>

int main()
{
  const double x[]={1,2,3,4};
  gsl_vector_const_view xview;
  xview = gsl_vector_const_view_array(x,4);
  return 0;
}

gives a
warning: assignment of read-only variable `xview'
since (in gsl_vector_double.h) gsl_vector_const_view is declared as a
constant pointer to a _gsl_vector_const_view:

typedef struct
{
  gsl_vector vector;
} _gsl_vector_const_view;

typedef const _gsl_vector_const_view gsl_vector_const_view;
        ^^^^^

Is this as intended? The manual states that 'Vector views can be defined
for both constant and non-constant vectors, using separate types that
preserve constness'. It seems to me that the point of the special const
type is to prevent changes to the vector viewed, not also changes to the
pointer to the view. I could easily prevent such changes to the pointer
myself when necessary, declaring

const gsl_vector_const_view xview;

But currently you cannot choose!

Am I missing something or can/could/should this be fixed?
(I think this can be done by moving the const inside the struct:

typedef struct
{
  const gsl_vector vector;
} _gsl_vector_const_view;

typedef _gsl_vector_const_view gsl_vector_const_view;

)

Greetings,
Fleur



More information about the Gsl-discuss mailing list