On Sat, 30 Mar 2024 at 06:12, NightStrike via Gcc-help <gcc-help@xxxxxxxxxxx> wrote: > > https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html > > That doc states that VLAs are supported in C++ as an extension. > Compiling the following: > > void f(int a, int b[a]); > void f() { > int c[2]; > f(2, c); > } > > with g++ -std=gnu++20 results in the error: "use of parameter outside > function body before ']' token". The docs say nothing about partial > support of VLA, just that they can be used. I don't think GNU C++ has any changes to the function declarator syntax to support variably modified types. You can define a VLA object, but you can't use earlier function parameters later in the function-parameter-list, and you can't use int b[*] in a parameter either. > > Where this is useful as an extension is in the somewhat reasonable > case of including a C header in a C++ program. If that C header > declares a function using a C99 VLA, it would be awesome if g++ were > to accept it in -std=gnu++ mode (and it would be fine if it were > rejected in -std=c++ mode). Consider a situation where you cannot > modify the header, and so have to use it as-is. > > Is there perhaps another option to achieve the intended behavior? > > If it's not possible, can this be added? > > If the consensus is that it shouldn't be added, could the docs at > least clarify what is supported and what is not in C++?