#include <iostream>
#include <cstdint>
using namespace std;
template <typename T, unsigned int N>
struct buffer {
int8_t v[N];
struct proxy {
int8_t *elem;
proxy(int8_t *elem) : elem(elem) {}
proxy& operator=(T value) {
// whatever you need...
*elem = static_cast<T>(value);
return *this;
}
operator T() const {
// whatever you need...
return static_cast<T>(*elem);
}
};
proxy operator[](int i) {
return proxy{ &v[i] };
}
};
int main() {
buffer<double, 1> buf;
buf[0] = 2.1;
std::cout << buf[0] << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGludD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgTj4Kc3RydWN0IGJ1ZmZlciB7CiAgICBpbnQ4X3QgdltOXTsKCiAgICBzdHJ1Y3QgcHJveHkgewogICAgICAgIGludDhfdCAqZWxlbTsKCiAgICAJcHJveHkoaW50OF90ICplbGVtKSA6IGVsZW0oZWxlbSkge30KCiAgICAgICAgcHJveHkmIG9wZXJhdG9yPShUIHZhbHVlKSB7CiAgICAgICAgICAgIC8vIHdoYXRldmVyIHlvdSBuZWVkLi4uCiAgICAgICAgICAgICplbGVtID0gc3RhdGljX2Nhc3Q8VD4odmFsdWUpOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIG9wZXJhdG9yIFQoKSBjb25zdCB7CiAgICAgICAgICAgIC8vIHdoYXRldmVyIHlvdSBuZWVkLi4uIAogICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oKmVsZW0pOwogICAgICAgIH0KICAgIH07CgogICAgcHJveHkgb3BlcmF0b3JbXShpbnQgaSkgewogICAgICAgIHJldHVybiBwcm94eXsgJnZbaV0gfTsKICAgIH0KfTsKCmludCBtYWluKCkgewoJYnVmZmVyPGRvdWJsZSwgMT4gYnVmOwoKCWJ1ZlswXSA9IDIuMTsKCXN0ZDo6Y291dCA8PCBidWZbMF0gPDwgc3RkOjplbmRsOwoKCXJldHVybiAwOwp9