#include <iostream>
using namespace std;
class Integers
{
public :
Integers( int * values) { _values = values; }
~Integers( ) { delete [ ] _values; } ;
const int & operator[ ] ( size_t index) const
{
return _values[ index] ;
}
operator const int * ( ) const
{
return _values;
}
private :
int & operator[ ] ( size_t index)
{
return _values[ index] ;
}
operator int * ( ) const
{
return _values;
}
int * _values;
} ;
int main( )
{
int * values = new int [ 5 ] { 0 , 1 , 2 , 3 , 4 } ;
Integers ints( values) ;
const int & i = ints[ 2 ] ;
printf ( "int: %d" , i) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEludGVnZXJzCnsKcHVibGljOgoJSW50ZWdlcnMoaW50KiB2YWx1ZXMpIHsgX3ZhbHVlcyA9IHZhbHVlczsgfQoJfkludGVnZXJzKCkgeyBkZWxldGVbXSBfdmFsdWVzOyB9OwoKCWNvbnN0IGludCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0Cgl7CgkJcmV0dXJuIF92YWx1ZXNbaW5kZXhdOwoJfQoJCglvcGVyYXRvciBjb25zdCBpbnQqKCkgY29uc3QKCXsKCQlyZXR1cm4gX3ZhbHVlczsKCX0KCQpwcml2YXRlOgoJaW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkKCXsKCQlyZXR1cm4gX3ZhbHVlc1tpbmRleF07Cgl9CgkKCW9wZXJhdG9yIGludCooKSBjb25zdAoJewoJCXJldHVybiBfdmFsdWVzOwoJfQoJCglpbnQqIF92YWx1ZXM7Cn07CgppbnQgbWFpbigpCnsKCWludCogdmFsdWVzID0gbmV3IGludFs1XSB7IDAsIDEsIDIsIDMsIDQgfTsKCUludGVnZXJzIGludHModmFsdWVzKTsKCWNvbnN0IGludCYgaSA9IGludHNbMl07CglwcmludGYoImludDogJWQiLCBpKTsKCXJldHVybiAwOwp9