#include <iostream>
class Base {
public:
virtual void print() { std::cout << "In base"<<std::endl; }
};
class Derived : public Base {
public:
virtual void print() override { std::cout << "In derived"<<std::endl; }
};
int main() {
auto print = [](Base &&obj){ obj.print(); };
auto doIt = [&print](bool doBase) { doBase ? print(Base{}) : print(Derived{}); };
doIt(true);
doIt(false);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQmFzZSB7CnB1YmxpYzoKICB2aXJ0dWFsIHZvaWQgcHJpbnQoKSB7IHN0ZDo6Y291dCA8PCAiSW4gYmFzZSI8PHN0ZDo6ZW5kbDsgfQp9OwoKY2xhc3MgRGVyaXZlZCA6IHB1YmxpYyBCYXNlIHsKcHVibGljOgogIHZpcnR1YWwgdm9pZCBwcmludCgpIG92ZXJyaWRlIHsgc3RkOjpjb3V0IDw8ICJJbiBkZXJpdmVkIjw8c3RkOjplbmRsOyB9Cn07CgppbnQgbWFpbigpIHsKICAgYXV0byBwcmludCA9IFtdKEJhc2UgJiZvYmopeyBvYmoucHJpbnQoKTsgfTsKICAgYXV0byBkb0l0ID0gWyZwcmludF0oYm9vbCBkb0Jhc2UpIHsgZG9CYXNlID8gcHJpbnQoQmFzZXt9KSA6IHByaW50KERlcml2ZWR7fSk7IH07CgogICBkb0l0KHRydWUpOwogICBkb0l0KGZhbHNlKTsKfQ==