https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97643
Bug ID: 97643
Summary: Accepts invalid qualification conversion involving
array of unknown bound [P0388]
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: leni536 at gmail dot com
Target Milestone: ---
version: g++ (Compiler-Explorer-Build) 11.0.0 20201029 (experimental)
https://godbolt.org/z/a8sKr3
In C++20 the following code is ill-formed, but gcc accepts it:
void foo(int (*arr)[10]);
void bar(int (*arr)[]) {
int (* ptr)[10];
int (** ptr2)[] = &ptr; // not allowed
*ptr2 = arr;
foo(ptr);
}
The conversion happens from T1 = int (**)[10] to T2 = int (**)[] .
The cv-decomposition of the two types are:
T1 = pointer to | pointer to | array of 10 | int
T2 = pointer to | pointer to | array of unknown bound of | int
The cv-combined type is:
T3 = pointer to | const pointer to | array of unknown bound of | int
= int (*const*)[]