fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<typename S,typename D>
  5. D type_cast(S s) {
  6. union Tmp {
  7. S src;
  8. D dst;
  9. } T;
  10. T.src = s;
  11. return T.dst;
  12. }
  13.  
  14. class MyArray10 {
  15. public:
  16. MyArray10() : a{'0','1','2','3','4','5','6','7','8','9'} {};
  17. char &operator[](size_t idx) {
  18. if (idx>9) throw std::out_of_range(type_cast<MyArray10*,char*>(this));
  19. return a[idx];
  20. }
  21. private:
  22. char a[10];
  23. };
  24.  
  25. int main() {
  26. MyArray10 Arr;
  27. try {
  28. std::cout << std::hex << Arr[1] << std::endl;
  29. std::cout << std::hex << Arr[10] << std::endl;
  30. } catch (std::out_of_range &e) {
  31. std::cout << "Выход за границы массива в: " << std::hex << static_cast <const void *> (e.what()) << std::endl;
  32. } catch (...) {
  33. std::cout << "Произошла неведомая хрень" << std::endl;
  34. }
  35. return 0;
  36. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
1
Выход за границы массива в: 0x559efcff2ce8