Date: Tue, 18 Feb 2025 17:14:07 +0300
> 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.
I am reading what 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. 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.
I have no idea what language is used in the standard.
I have no
You can meet me at http://cpp.forum24.ru/ or www.stackoverflow.com or http://ru.stackoverflow.com
>Вторник, 18 февраля 2025, 0:11 +03:00 от Brian Bi <bbi5291_at_[hidden]>:
>
>
>On Mon, Feb 17, 2025 at 3:09PM 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
>
>
>
I am reading what 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. 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.
I have no idea what language is used in the standard.
I have no
You can meet me at http://cpp.forum24.ru/ or www.stackoverflow.com or http://ru.stackoverflow.com
>Вторник, 18 февраля 2025, 0:11 +03:00 от Brian Bi <bbi5291_at_[hidden]>:
>
>
>On Mon, Feb 17, 2025 at 3:09PM 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-18 14:14:34