#include <iostream>
struct wrapper
{
wrapper( ) : data( 6 ) { }
void modify( int value) const
{
// this->data = value; // compile error: this is a pointer to const
const_cast < wrapper* > ( this ) - > data = value; // OK as long as the type object isn't const
}
int data;
} ;
int main( )
{
int i = 6 ; // i is not declared const
const int & ci = i;
const_cast < int & > ( ci) = 42 ; // OK: modifies i
std:: cout << "i = " << i << std:: endl ; // OK, will be 42
const int j = 6 ; // j is declared const
int * pj = const_cast < int * > ( & j) ;
* pj = 42 ; // undefined behavior!
std:: cout << "j = " << j << std:: endl ; // can be both 6 or 42
wrapper w;
w.modify ( 42 ) ;
std:: cout << "w.data = " << w.data << std:: endl ;
const wrapper cw;
cw.modify ( 42 ) ; // undefined behavior!
std:: cout << "cw.data = " << cw.data << std:: endl ; // can be both 6 or 42
void ( wrapper:: * mp) ( int ) const = & wrapper:: modify ; // pointer to member function
const_cast < void ( wrapper:: * ) ( int ) > ( mp) ; // compiler error: const_cast does not work on function pointers
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnN0cnVjdCB3cmFwcGVyCnsKICB3cmFwcGVyKCkgOiBkYXRhKDYpIHsgfQogIHZvaWQgbW9kaWZ5KGludCB2YWx1ZSkgY29uc3QKICB7CiAgICAvLyB0aGlzLT5kYXRhID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAvLyBjb21waWxlIGVycm9yOiB0aGlzIGlzIGEgcG9pbnRlciB0byBjb25zdAogICAgY29uc3RfY2FzdDx3cmFwcGVyKj4odGhpcyktPmRhdGEgPSB2YWx1ZTsgLy8gT0sgYXMgbG9uZyBhcyB0aGUgdHlwZSBvYmplY3QgaXNuJ3QgY29uc3QKICB9CiAgaW50IGRhdGE7Cn07CiAKaW50IG1haW4oKSAKewogICAgICAgIGludCBpID0gNjsgICAgICAgICAgICAgICAgICAgICAgICAvLyBpIGlzIG5vdCBkZWNsYXJlZCBjb25zdAogIGNvbnN0IGludCYgY2kgPSBpOyAKICBjb25zdF9jYXN0PGludCY+KGNpKSA9IDQyOyAgICAgICAgICAgICAgLy8gT0s6IG1vZGlmaWVzIGkKICBzdGQ6OmNvdXQgPDwgImkgPSAiIDw8IGkgPDwgc3RkOjplbmRsOyAgLy8gT0ssIHdpbGwgYmUgNDIKCiAgY29uc3QgaW50IGogPSA2OyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGogaXMgZGVjbGFyZWQgY29uc3QKICAgICAgICBpbnQqIHBqID0gY29uc3RfY2FzdDxpbnQqPigmaik7CiAgICAgICAgICAgICpwaiA9IDQyOyAgICAgICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBiZWhhdmlvciEKICBzdGQ6OmNvdXQgPDwgImogPSAiIDw8IGogPDwgc3RkOjplbmRsOyAgLy8gY2FuIGJlIGJvdGggNiBvciA0MgoKICB3cmFwcGVyIHc7CiAgdy5tb2RpZnkoNDIpOwogIHN0ZDo6Y291dCA8PCAidy5kYXRhID0gIiA8PCB3LmRhdGEgPDwgc3RkOjplbmRsOwoKICBjb25zdCB3cmFwcGVyIGN3OwogIGN3Lm1vZGlmeSg0Mik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgYmVoYXZpb3IhCiAgc3RkOjpjb3V0IDw8ICJjdy5kYXRhID0gIiA8PCBjdy5kYXRhIDw8IHN0ZDo6ZW5kbDsgIC8vIGNhbiBiZSBib3RoIDYgb3IgNDIKCiAgdm9pZCAod3JhcHBlcjo6Km1wKShpbnQpIGNvbnN0ID0gJndyYXBwZXI6Om1vZGlmeTsgLy8gcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24KICBjb25zdF9jYXN0PHZvaWQod3JhcHBlcjo6KikoaW50KT4obXApOyAvLyBjb21waWxlciBlcnJvcjogY29uc3RfY2FzdCBkb2VzIG5vdCB3b3JrIG9uIGZ1bmN0aW9uIHBvaW50ZXJzCn0=
compilation info
prog.cpp: In function 'int main()':
prog.cpp:35:39: error: invalid use of const_cast with type 'void (wrapper::*)(int)', which is not a pointer, reference, nor a pointer-to-data-member type
const_cast<void(wrapper::*)(int)>(mp); // compiler error: const_cast does not work on function pointers
^
stdout