#include <iostream>
using namespace std;
class Tensor
{
public:
Tensor& setA() { cout << "A"; return *this; }
Tensor& setB() { cout << "B"; return *this; }
Tensor& setC() { cout << "C"; return *this; }
Tensor& setD() { cout << "D"; return *this; }
Tensor& setE() { cout << "E"; return *this; }
void build() { cout << endl; }
};
Tensor& doSetE(Tensor &t)
{
return t.setE();
}
Tensor& doNoOp(Tensor &t)
{
return t;
}
void doTest(bool flag)
{
Tensor& (*temp)(Tensor&) = flag ? &doSetE : &doNoOp;
temp(Tensor{}
.setA()
.setB()
.setC()
.setD())
.build();
}
int main()
{
doTest(false);
doTest(true);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVGVuc29yCnsKcHVibGljOgoJVGVuc29yJiBzZXRBKCkgeyBjb3V0IDw8ICJBIjsgcmV0dXJuICp0aGlzOyB9CiAgICBUZW5zb3ImIHNldEIoKSB7IGNvdXQgPDwgIkIiOyByZXR1cm4gKnRoaXM7IH0KICAgIFRlbnNvciYgc2V0QygpIHsgY291dCA8PCAiQyI7IHJldHVybiAqdGhpczsgfQogICAgVGVuc29yJiBzZXREKCkgeyBjb3V0IDw8ICJEIjsgcmV0dXJuICp0aGlzOyB9CiAgICBUZW5zb3ImIHNldEUoKSB7IGNvdXQgPDwgIkUiOyByZXR1cm4gKnRoaXM7IH0KICAgIHZvaWQgYnVpbGQoKSB7IGNvdXQgPDwgZW5kbDsgfQp9OwoKVGVuc29yJiBkb1NldEUoVGVuc29yICZ0KQp7CglyZXR1cm4gdC5zZXRFKCk7Cn0KClRlbnNvciYgZG9Ob09wKFRlbnNvciAmdCkKewoJcmV0dXJuIHQ7Cn0KCnZvaWQgZG9UZXN0KGJvb2wgZmxhZykKewoJVGVuc29yJiAoKnRlbXApKFRlbnNvciYpID0gZmxhZyA/ICZkb1NldEUgOiAmZG9Ob09wOwoKICAgIHRlbXAoVGVuc29ye30KICAgIC5zZXRBKCkKICAgIC5zZXRCKCkKICAgIC5zZXRDKCkKICAgIC5zZXREKCkpCiAgICAuYnVpbGQoKTsKfQoKaW50IG1haW4oKQp7Cglkb1Rlc3QoZmFsc2UpOwoJZG9UZXN0KHRydWUpOwoJcmV0dXJuIDA7Cn0=