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
