#include <iostream>
#include <stdio.h>
struct SimpleStruct{
const size_t i;
constexpr SimpleStruct(const size_t i) : i(i) {}
};
struct ComplexStructB{
private:
const SimpleStruct* const array_;
public:
const SimpleStruct& operator[](const size_t index){
return array_[index];
}
constexpr ComplexStructB(const SimpleStruct* const array) : array_(array) {}
};
struct ComplexStructA{
private:
const ComplexStructB* const array_;
public:
const ComplexStructB& operator[](const size_t index){
return array_[index];
}
constexpr ComplexStructA(const ComplexStructB* const array) : array_(array) {}
};
SimpleStruct simple = {42};
ComplexStructB complex_b = {&simple};
ComplexStructA complex_a = {&complex_b};
int main(void) {
std::cout << "Simple is " << simple.i << std::endl;
std::cout << "Complex B is " << complex_b[0].i << std::endl;
auto extracted_b = complex_a[0];
// Ошибка !
std::cout << "Complex A is " << extracted_b[0].i << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KCnN0cnVjdCBTaW1wbGVTdHJ1Y3R7Cgljb25zdCBzaXplX3QgaTsKCWNvbnN0ZXhwciBTaW1wbGVTdHJ1Y3QoY29uc3Qgc2l6ZV90IGkpIDogaShpKSB7fQp9OwoKc3RydWN0IENvbXBsZXhTdHJ1Y3RCewpwcml2YXRlOgoJY29uc3QgU2ltcGxlU3RydWN0KiBjb25zdCBhcnJheV87CnB1YmxpYzoKCWNvbnN0IFNpbXBsZVN0cnVjdCYgb3BlcmF0b3JbXShjb25zdCBzaXplX3QgaW5kZXgpewoJCXJldHVybiBhcnJheV9baW5kZXhdOwoJfQoJY29uc3RleHByIENvbXBsZXhTdHJ1Y3RCKGNvbnN0IFNpbXBsZVN0cnVjdCogY29uc3QgYXJyYXkpIDogYXJyYXlfKGFycmF5KSB7fQp9OwoKc3RydWN0IENvbXBsZXhTdHJ1Y3RBewpwcml2YXRlOgoJY29uc3QgQ29tcGxleFN0cnVjdEIqIGNvbnN0IGFycmF5XzsKcHVibGljOgoJY29uc3QgQ29tcGxleFN0cnVjdEImIG9wZXJhdG9yW10oY29uc3Qgc2l6ZV90IGluZGV4KXsKCQlyZXR1cm4gYXJyYXlfW2luZGV4XTsKCX0KCWNvbnN0ZXhwciBDb21wbGV4U3RydWN0QShjb25zdCBDb21wbGV4U3RydWN0QiogY29uc3QgYXJyYXkpIDogYXJyYXlfKGFycmF5KSB7fQp9OwoKU2ltcGxlU3RydWN0IHNpbXBsZSA9IHs0Mn07CkNvbXBsZXhTdHJ1Y3RCIGNvbXBsZXhfYiA9IHsmc2ltcGxlfTsKQ29tcGxleFN0cnVjdEEgY29tcGxleF9hID0geyZjb21wbGV4X2J9OwoKaW50IG1haW4odm9pZCkgewoJCglzdGQ6OmNvdXQgPDwgIlNpbXBsZSBpcyAiIDw8IHNpbXBsZS5pIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiQ29tcGxleCBCIGlzICIgPDwgY29tcGxleF9iWzBdLmkgPDwgc3RkOjplbmRsOwoJCglhdXRvIGV4dHJhY3RlZF9iID0gY29tcGxleF9hWzBdOwoJLy8g0J7RiNC40LHQutCwICEKCXN0ZDo6Y291dCA8PCAiQ29tcGxleCBBIGlzICIgPDwgZXh0cmFjdGVkX2JbMF0uaSA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gMDsKfQ==