C++ Logo

std-discussion

Advanced search

Re: Incomplete pointer type

From: Brian Bi <bbi5291_at_[hidden]>
Date: Mon, 17 Feb 2025 16:11:34 -0500
On Mon, Feb 17, 2025 at 3:09 PM Vladimir Grigoriev via Std-Discussion <
std-discussion_at_[hidden]> wrote:

> In p. 5 of the section 6.2 Declarations and definitions of the C++23
> Standard there is written
>
> 5 In the definition of an object, the type of that object shall not be an
> incomplete type (6.8), an abstract class type (11.7.4), or a (possibly
> multi-dimensional) array thereof
>
> Also in p.5 of the sub-section 6.8.1 General of the section 6.8 Types
> there is written
>
> ...The type of a pointer to array of unknown bound, or of a type defined
> by a typedef declaration to be an array of unknown bound, cannot be
> completed.
>
> And further there is followed an example (Example 3)
>
> class X; // X is an incomplete type
> extern X* xp; // xp is a pointer to an incomplete type
> extern int arr[]; // the type of arr is incomplete
> typedef int UNKA[]; // UNKA is an incomplete type
> UNKA* arrp; // arrp is a pointer to an incomplete type
> UNKA** arrpp;
>
> But according to the first provided quote this object definition
>
> UNKA* arrp; // arrp is a pointer to an incomplete type
>
> is invalid because such a pointer has an incomplete type.
>

All pointer types are complete. What the standard means to say, but uses
imprecise language to describe, is that `UNKA*` is a distinct type from
`A*` where `A` is any array of known bound. This stands in contrast to the
case of `X*`, which will be the same as the type `X*` later on when `X` is
complete.


>
> So it looks like the example does not make sense or do I have missed
> something?
>
> With best regards
> (Vlad from Moscow)
> You can meet me at http://cpp.forum24.ru/ or www.stackoverflow.com or
> http://ru.stackoverflow.com
> --
> Std-Discussion mailing list
> Std-Discussion_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-discussion
>


-- 
*Brian Bi*

Received on 2025-02-17 21:11:50