As an additional note, I recognize now that gsl_vector.block is a non-array pointer. How would this be annotated for Reflex – //[1]?
Pointers to numeric type are assumed to be arrays and thus need to be decorated.
Pointers to objects are assumed to be non-array and a single element is stored.
will Reflex recognize that these are two pointers to the same array?
In ROOT I/O we do have, for objects only, code to recognize that the same objects is being stored twice (within an I/O operation). Consequently, you example would have worked if the data has been struct/classes. For numeric type, this detection has not been implemented (as it is very rare but would still come to a cost to all cases).
Instead in this case, I recommend to set gsl_vector::data as a transient member (never saved) and add an I/O customization rules that sets gsl_vector::data to the value of gsl_vector::block::data at the end of the streaming.
Cheers,
Philippe.