Re: A: a new bug to old plain C

Jonathan Wakely via Gcc-help <[email protected]>
Newsgroups gmane.comp.gcc.help
Message-ID <CAH6eHdQMgqqKjhYoFH0CjLWWqmEqzrqw_TNMDv4_uutLJ38gCg@mail.gmail.com>
On Sat, 22 Nov 2025, 15:18 Александр Поваляев, <[email protected]> wrote:

> Hi there!
>
> The links you posted are all about "Don't use Foo** → const Foo**, use const
> Foo** to const Foo* const* conversion instead"
> (https://isocpp.org/wiki/faq/const-correctness#constptrptr-conversion,
> https://c-faq.com/ansi/constmismatch.html).
> Also, it is being discussed if it is safe or not to use such kind of
> conversion.
>
> But we don't use "Foo** -> const Foo**" conversion anyhow.
> We use "Foo** -> const Foo * const * const" conversion. So, we just follow
> the recommendation given and not the opposite. :)
>


And so your code would compile in C++.

But like it says in the C FAQ, the rules for C and C++ are different. C
does not allow that conversion, even though it would be safe (and C++ does
allow it).

Here is the relevant part:

"C++ has more complicated rules for assigning const-qualified pointers
which let you make more kinds of assignments without incurring warnings,
but still protect against inadvertent attempts to modify const values. C++
would still not allow assigning a char ** to a const char **, but it would
let you get away with assigning a char ** to a const char * const *.)"





> Anyway some compilers return an error. And this is not the expected
> behaviour for use. It is A BUG!!!
>

OK, maybe try a different compiler then.




>
>>>
>>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.