#include <iostream>
void ptrFunc( const int* p )
{
if ( p )
{
std::cout << "*p == " << *p << std::endl;
}
}
void refFunc( const int& i )
{
std::cout << "(ref)i == " << i << std::endl;
}
void valueFunc( int i )
{
std::cout << "i == " << i << std::endl;
}
template< class T >
const T* addrtemp(const T& arg)
{
return reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char&>(arg)));
}
int main()
{
valueFunc( int() );
refFunc( int() );
ptrFunc( addrtemp(int()) );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdm9pZCBwdHJGdW5jKCBjb25zdCBpbnQqIHAgKQp7CiAgaWYgKCBwICkKICB7CiAgICBzdGQ6OmNvdXQgPDwgIipwID09ICIgPDwgKnAgPDwgc3RkOjplbmRsOwogIH0KfQoKdm9pZCByZWZGdW5jKCBjb25zdCBpbnQmIGkgKQp7CiAgc3RkOjpjb3V0IDw8ICIocmVmKWkgPT0gIiA8PCBpIDw8IHN0ZDo6ZW5kbDsKfQoKdm9pZCB2YWx1ZUZ1bmMoIGludCBpICkKewogIHN0ZDo6Y291dCA8PCAiaSA9PSAiIDw8IGkgPDwgc3RkOjplbmRsOwp9Cgp0ZW1wbGF0ZTwgY2xhc3MgVCA+CmNvbnN0IFQqIGFkZHJ0ZW1wKGNvbnN0IFQmIGFyZykgCnsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPigKICAgICAgICAgICAgICAgJmNvbnN0X2Nhc3Q8Y2hhciY+KAogICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHZvbGF0aWxlIGNoYXImPihhcmcpKSk7Cn0KCmludCBtYWluKCkKewogIHZhbHVlRnVuYyggaW50KCkgKTsKICByZWZGdW5jKCBpbnQoKSApOwogIHB0ckZ1bmMoIGFkZHJ0ZW1wKGludCgpKSApOwogIHJldHVybiAwOwp9