How to convert "pointer to pointer type" to const?

c++, const-cast, constants

Solution

The language allows implicit conversion from `double **` to `const double *const *`, but not to `const double **`. The conversion you attempt would implicitly violate the rules of const correctness, even though it is not immediately obvious.

The example in the [de-facto standard] C++ FAQ illustrates the issue

https://isocpp.org/wiki/faq/const-correctness#constptrptr-conversion

Basically, the rule is: once you add `const` at some level of indirection, you have to add `const` to all levels of indirection all the way to the right. For example, `int *****` cannot be implicitly converted to `int **const ***`, but it can be implicitly converted to `int **const *const *const *`

Problem

With the following code ``` void TestF(const double ** testv){;} void callTest(){ double** test; TestF(test); } ``` I get this: ``` 'TestF' : cannot convert parameter 1 from 'double **' to 'const double **' ``` I cannot understand why. Why `test` cannot be silently casted to `const double**`? Why should I do it explicitly? I know that ``` TestF(const_cast<const double**>(test)) ``` makes my code correct, but I feel this should be unnecessary. Are there some key concepts about const that I'm missing?

Original source

Related problems