#include <iostream>
using namespace std;
template<typename S,typename D>
D type_cast(S s) {
union Tmp {
S src;
D dst;
} T;
T.src = s;
return T.dst;
}
class MyArray10 {
public:
MyArray10() : a{'0','1','2','3','4','5','6','7','8','9'} {};
char &operator[](size_t idx) {
if (idx>9) throw std::out_of_range(type_cast<MyArray10*,char*>(this));
return a[idx];
}
private:
char a[10];
};
int main() {
MyArray10 Arr;
try {
std::cout << std::hex << Arr[1] << std::endl;
std::cout << std::hex << Arr[10] << std::endl;
} catch (std::out_of_range &e) {
std::cout << "Выход за границы массива в: " << std::hex << static_cast <const void *> (e.what()) << std::endl;
} catch (...) {
std::cout << "Произошла неведомая хрень" << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgUyx0eXBlbmFtZSBEPgpEIHR5cGVfY2FzdChTIHMpIHsKICB1bmlvbiBUbXAgewogICAgUyBzcmM7CiAgICBEIGRzdDsKICB9IFQ7CiAgVC5zcmMgPSBzOwogIHJldHVybiBULmRzdDsKfQoKY2xhc3MgTXlBcnJheTEwIHsKICBwdWJsaWM6CiAgICBNeUFycmF5MTAoKSA6IGF7JzAnLCcxJywnMicsJzMnLCc0JywnNScsJzYnLCc3JywnOCcsJzknfSB7fTsKICAgIGNoYXIgJm9wZXJhdG9yW10oc2l6ZV90IGlkeCkgewogICAgICBpZiAoaWR4PjkpIHRocm93IHN0ZDo6b3V0X29mX3JhbmdlKHR5cGVfY2FzdDxNeUFycmF5MTAqLGNoYXIqPih0aGlzKSk7CiAgICAgIHJldHVybiBhW2lkeF07CiAgICB9CiAgcHJpdmF0ZToKICAgIGNoYXIgYVsxMF07CQp9OwoKaW50IG1haW4oKSB7CiAgTXlBcnJheTEwIEFycjsKICB0cnkgewogIAlzdGQ6OmNvdXQgPDwgc3RkOjpoZXggPDwgQXJyWzFdIDw8IHN0ZDo6ZW5kbDsKICAJc3RkOjpjb3V0IDw8IHN0ZDo6aGV4IDw8IEFyclsxMF0gPDwgc3RkOjplbmRsOwogIH0gY2F0Y2ggKHN0ZDo6b3V0X29mX3JhbmdlICZlKSB7CiAgCXN0ZDo6Y291dCA8PCAi0JLRi9GF0L7QtCDQt9CwINCz0YDQsNC90LjRhtGLINC80LDRgdGB0LjQstCwINCyOiAiIDw8IHN0ZDo6aGV4IDw8IHN0YXRpY19jYXN0IDxjb25zdCB2b2lkICo+IChlLndoYXQoKSkgPDwgc3RkOjplbmRsOwogIH0gY2F0Y2ggKC4uLikgewogIAlzdGQ6OmNvdXQgPDwgItCf0YDQvtC40LfQvtGI0LvQsCDQvdC10LLQtdC00L7QvNCw0Y8g0YXRgNC10L3RjCIgPDwgc3RkOjplbmRsOwogIH0JCiAgcmV0dXJuIDA7Cn0=