#include <iostream>
template <class T>
void TestDuck(T& duck)
{
duck.Walk();
duck.Quack();
}
class Duck
{
public:
void Walk() { std::cout << "Walking...\n"; }
void Quack() { std::cout << "QUACK!!!\n"; }
};
class DuckSimulation
{
public:
void Walk() { std::cout << "Simulated walking...\n"; }
void Quack() { std::cout << "Simulated QUACK!!!\n"; }
};
int main()
{
Duck d;
TestDuck(d);
DuckSimulation sd;
TestDuck(sd);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIFRlc3REdWNrKFQmIGR1Y2spCnsKICAgIGR1Y2suV2FsaygpOwogICAgZHVjay5RdWFjaygpOwp9CiAKY2xhc3MgRHVjawp7CnB1YmxpYzoKICAgIHZvaWQgV2FsaygpIHsgc3RkOjpjb3V0IDw8ICJXYWxraW5nLi4uXG4iOyB9CiAgICB2b2lkIFF1YWNrKCkgeyBzdGQ6OmNvdXQgPDwgIlFVQUNLISEhXG4iOyB9Cn07CiAKY2xhc3MgRHVja1NpbXVsYXRpb24KewpwdWJsaWM6CiAgICB2b2lkIFdhbGsoKSB7IHN0ZDo6Y291dCA8PCAiU2ltdWxhdGVkIHdhbGtpbmcuLi5cbiI7IH0KICAgIHZvaWQgUXVhY2soKSB7IHN0ZDo6Y291dCA8PCAiU2ltdWxhdGVkIFFVQUNLISEhXG4iOyB9Cn07CiAKaW50IG1haW4oKQp7CiAgICBEdWNrIGQ7CiAgICBUZXN0RHVjayhkKTsKIAogICAgRHVja1NpbXVsYXRpb24gc2Q7CiAgICBUZXN0RHVjayhzZCk7Cn0K