Is it allowed to static_cast between different types of const?

c++

Solution

From [expr.static.cast]

[...] The static_cast operator shall not cast away constness

It's perfectly fine to add `const` using `static_cast`, then again you don't need to in your test case

const int a = 42; // test case 1, const obj
const double b = static_cast<double>(a); // Works just as well.
const double b = a; // Of course this is fine too

I suppose one of the few times you'd want to add `const` with `static_cast` would be to explicitly call an overloaded function

void foo(int*) { }
void foo(int const*) { }

int main()
{
  int a = 42;

  foo(&a);
  foo(static_cast<int const*>(&a));
}

Although with properly designed code you shouldn't really need to do this.

Problem

I have rarely seen static_cast between top level const so far. Recently I had to use static_cast to display address of a pointer to const object and I come out with this question: Is it allowed to static_cast between different types of const? It passed compilation using gcc 4.7. But I am just asking here to confirm it is not UB. Thanks. ``` const int a = 42; // test case 1, const obj const double b = static_cast<const double>(a); cout << b << endl; const int c = 0; // test case 2, pointer to const obj cout << static_cast<const void*>(&c) << endl; ```

Original source