#include <iostream>
#include <map>
struct thing {
float f[1];
using key_data = std::pair<int,float&>;
struct iterator {
key_data data;
const key_data& operator*() { return data; }
key_data *operator->() { return &data; }
};
iterator begin() { return {{0, f[0] }}; }
};
template<typename T> void test(T iter) {
(*iter).second = 1.0; std::cout << (*iter).second;
iter->second = 2.0; std::cout << iter->second;
}
int main() {
std::map<int, float> fmap{{0, 0.0}};
test(fmap.begin());
std::cout << fmap[0];
thing f;
test(f.begin());
std::cout << f.f[0];
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgoKc3RydWN0IHRoaW5nIHsKICBmbG9hdCBmWzFdOwogIHVzaW5nIGtleV9kYXRhID0gc3RkOjpwYWlyPGludCxmbG9hdCY+OwoKICBzdHJ1Y3QgaXRlcmF0b3IgewogICAga2V5X2RhdGEgZGF0YTsKICAgIGNvbnN0IGtleV9kYXRhJiBvcGVyYXRvciooKSB7IHJldHVybiBkYXRhOyB9CiAgICBrZXlfZGF0YSAqb3BlcmF0b3ItPigpIHsgcmV0dXJuICZkYXRhOyB9CiAgfTsKCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiB7ezAsIGZbMF0gfX07IH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdGVzdChUIGl0ZXIpIHsKICAoKml0ZXIpLnNlY29uZCA9IDEuMDsgc3RkOjpjb3V0IDw8ICgqaXRlcikuc2Vjb25kOwoKICBpdGVyLT5zZWNvbmQgPSAyLjA7IHN0ZDo6Y291dCA8PCBpdGVyLT5zZWNvbmQ7Cn0KCmludCBtYWluKCkgewogIHN0ZDo6bWFwPGludCwgZmxvYXQ+IGZtYXB7ezAsIDAuMH19OwogIHRlc3QoZm1hcC5iZWdpbigpKTsKICBzdGQ6OmNvdXQgPDwgZm1hcFswXTsKCiAgdGhpbmcgZjsKICB0ZXN0KGYuYmVnaW4oKSk7CiAgc3RkOjpjb3V0IDw8IGYuZlswXTsKfQo=