It looks like we are getting nowhere here... To conclude this "discussion" I'll 
reiterate just the relevant points as concisely as I can:

1. Standard C language does not allow the following pointer conversions as 
implicit conversions:

  T ** -> const T *const *
  T ** -> const T *const *const

A program that attempts to rely on such conversions (as implicit conversions) 
is 
invalid, i.e. it contains a constraint violation - a "hard error" in standard C.

2. Compliant C compilers are required to issue diagnostic messages for 
constraint violations. Format and wording of such diagnostic messages are not 
standardized in any way. Standard C does not have concepts of "errors" or 
"warnings".

It is your responsibility to figure out that a diagnostic message issued for 
this constraint violation indicates a "hard error", provided you possess 
sufficiently pedantic knowledge of C standard. If you don't possess this level 
of knowledge of C standard (which is apparently the case in your case), but 
still want to write code in standard C, configuration settings like 
`-pedantic-errors` will help you. Moreover, in the latter case, you are not 
allowed to even approach C compilers without `-pedantic-errors`. Trying to do 
so 
will only lead to confusion.

3. If you do not have a "language-lawyer" level of knowledge of C standard, you 
do not get to make such bold statements as "I found a bug in C compiler". Which 
is well-illustrated by this thread: in this case there's no bug. The compiler 
is 
behaving 100% correctly, despite your claims to the contrary.

4. As it has been stated repeatedly, there's ongoing work aiming to support 
such 
conversions in future iterations of C language standard. But as of C23, these 
conversions are not supported (as implicit conversions).

-- 
Best regards,
Andrey

Reply via email to