fork download
  1. #include <iostream>
  2. #include <stdio.h>
  3.  
  4. struct SimpleStruct{
  5. const size_t i;
  6. constexpr SimpleStruct(const size_t i) : i(i) {}
  7. };
  8.  
  9. struct ComplexStructB{
  10. private:
  11. const SimpleStruct* const array_;
  12. public:
  13. const SimpleStruct& operator[](const size_t index){
  14. return array_[index];
  15. }
  16. constexpr ComplexStructB(const SimpleStruct* const array) : array_(array) {}
  17. };
  18.  
  19. struct ComplexStructA{
  20. private:
  21. const ComplexStructB* const array_;
  22. public:
  23. const ComplexStructB& operator[](const size_t index){
  24. return array_[index];
  25. }
  26. constexpr ComplexStructA(const ComplexStructB* const array) : array_(array) {}
  27. };
  28.  
  29. SimpleStruct simple = {42};
  30. ComplexStructB complex_b = {&simple};
  31. ComplexStructA complex_a = {&complex_b};
  32.  
  33. int main(void) {
  34.  
  35. std::cout << "Simple is " << simple.i << std::endl;
  36. std::cout << "Complex B is " << complex_b[0].i << std::endl;
  37.  
  38. auto extracted_b = complex_a[0];
  39. // Ошибка !
  40. std::cout << "Complex A is " << extracted_b[0].i << std::endl;
  41. return 0;
  42. }
Success #stdin #stdout 0s 4720KB
stdin
Standard input is empty
stdout
Simple is 42
Complex B is 42
Complex A is 42