// From: http://en.cppreference.com/w/cpp/language/const_cast #include struct type { type() {i=3;} void m1(int v) const { // this->i = v; // compile error: this is a pointer to const const_cast(this)->i = v; // OK as long as the type object isn't const } int i; }; int main() { int i = 3; // i is not declared const const int& cref_i = i; const_cast(cref_i) = 4; // OK: modifies i std::cout << "i = " << i << '\n'; type t; // note, if this is const type t;, then t.m1(4); is UB t.m1(4); std::cout << "type::i = " << t.i << '\n'; const int j = 3; // j is declared const int* pj = const_cast(&j); *pj = 4; // undefined behavior! void (type::*mfp)(int) const = &type::m1; // pointer to member function // const_cast(mfp); // compiler error: const_cast does not // work on function pointers }