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?