#include <iostream>
#include <functional>
using namespace std;
template <typename T> class ro_prop
{
private:
const function<T()> get;
public:
ro_prop(const function<T()> &&get) : get(get) {}
operator T() { return get(); }
};
struct rect
{
int width, height;
ro_prop<int> area = ro_prop<int>([this]() { return width * height; });
};
int main()
{
rect a { 2, 3 };
cout << a.area << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mgcm9fcHJvcAp7CiAgcHJpdmF0ZToKICAgIGNvbnN0IGZ1bmN0aW9uPFQoKT4gZ2V0OwoKICBwdWJsaWM6CiAgICByb19wcm9wKGNvbnN0IGZ1bmN0aW9uPFQoKT4gJiZnZXQpIDogZ2V0KGdldCkge30KICAgIG9wZXJhdG9yIFQoKSB7IHJldHVybiBnZXQoKTsgfQp9OwoKc3RydWN0IHJlY3QKewogIGludCB3aWR0aCwgaGVpZ2h0OwogIHJvX3Byb3A8aW50PiBhcmVhID0gcm9fcHJvcDxpbnQ+KFt0aGlzXSgpIHsgcmV0dXJuIHdpZHRoICogaGVpZ2h0OyB9KTsKfTsKCmludCBtYWluKCkKewogIHJlY3QgYSB7IDIsIDMgfTsKCiAgY291dCA8PCBhLmFyZWEgPDwgZW5kbDsKICAKICByZXR1cm4gMDsKfQ==