Topic: Defect Report: pointer to array qualification conversions


Author: "Roger Orr" <rogero@howzatt.demon.co.uk>
Date: 03 Jan 02 06:10:51 GMT
Raw View
 [Moderator's note: this defect report has been
 forwarded to the C++ committee. -moderator.]

Section 4.4 "Qualification Conversions" [conv.qual]
covers the case of multi-level pointers, but does not appear to cover the
case of pointers to arrays of pointers.
The effect is that arrays are treated differently from simple scalar values.

Consider for example the following code:
(from the thread "Pointer to array conversion question" begun in
comp.lang.c++.moderated)

int main()
{
   double *array2D[2][3];

   double       *       (*array2DPtr1)[3] = array2D;     // Legal
   double       * const (*array2DPtr2)[3] = array2DPtr1; // Legal
   double const * const (*array2DPtr3)[3] = array2DPtr2; // Illegal
}

and compare this code with:-

int main()
{
   double *array[2];

   double       *       *ppd1 = array; // legal
   double       * const *ppd2 = ppd1;  // legal
   double const * const *ppd3 = ppd2;  // certainly legal (4.4/4)
}

The problem appears to be that the pointed to types in example 1 are
unrelated since nothing in the
relevant section of the standard covers it - 4.4 does not mention
conversions of the form
"cv array of N pointer to T"
into
"cv array of N pointer to cv T"

It appears that reinterpret_cast is the only way to perform the conversion.

Artem Livshits proposed a resolution :-

"I suppose if the definition of "similar" pointer types in 4.4/4 was
rewritten like this:

T1 is cv1,0 P0 cv1,1 P1 ... cv1,n-1 Pn-1 cv1,n T
and
T2 is cv1,0 P0 cv1,1 P1 ... cv1,n-1 Pn-1 cv1,n T

where Pi is either a "pointer to" or a "pointer to an array of Ni"; besides
P0 may be also a "reference to" or a "reference to an array of N0" (in the
case of P0 of T2 being a reference, P0 of T1 may be nothing).

it would address the problem.

In fact I guess Pi in this notation may be also a "pointer to member", so
4.4/{4,5,6,7} would be nicely wrapped in one paragraph."

Roger Orr
--
MVP in C++ at www.brainbench.com
---
[ comp.std.c++ is moderated.  To submit articles, try just posting with ]
[ your news-reader.  If that fails, use mailto:std-c++@ncar.ucar.edu    ]
[              --- Please see the FAQ before posting. ---               ]
[ FAQ: http://www.research.att.com/~austern/csc/faq.html                ]