#include <iostream>
template<class Type>
class Other {
public:
Type x;
Other(Type y){
x = y;
}
};
void first(const Other<int>& o) {/*One way of specifying the formal parameter*/
std::cout << o.x << '\n';
}
template<typename T> void second(const Other<T>& o) {/*Other way of specifyin formal parameter*/
/*Has to be decalred as templated function*/
std::cout << o.x << '\n';
}
int main(){
Other<int> other(123);/*initializing template class constructor*/
first(other);/*sending templated class as parameters*/
second(other);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8Y2xhc3MgVHlwZT4KY2xhc3MgT3RoZXIgewogICAgCiAgICBwdWJsaWM6CiAgICAJVHlwZSB4OwogICAgCU90aGVyKFR5cGUgeSl7CiAgICAgICAgCXggPSB5OwogICAgCX0KfTsKCgoKICAgIHZvaWQgZmlyc3QoY29uc3QgT3RoZXI8aW50PiYgbykgey8qT25lIHdheSBvZiBzcGVjaWZ5aW5nIHRoZSBmb3JtYWwgcGFyYW1ldGVyKi8KICAgIAkKICAgIAlzdGQ6OmNvdXQgPDwgby54IDw8ICdcbic7CiAgICB9CiAgICAgICAgCiAKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlY29uZChjb25zdCBPdGhlcjxUPiYgbykgey8qT3RoZXIgd2F5IG9mIHNwZWNpZnlpbiBmb3JtYWwgcGFyYW1ldGVyKi8KICAgIAkvKkhhcyB0byBiZSBkZWNhbHJlZCBhcyB0ZW1wbGF0ZWQgZnVuY3Rpb24qLwogICAgICAgIHN0ZDo6Y291dCA8PCBvLnggPDwgJ1xuJzsKICAgIH0KCgppbnQgbWFpbigpewogICAgT3RoZXI8aW50PiBvdGhlcigxMjMpOy8qaW5pdGlhbGl6aW5nIHRlbXBsYXRlIGNsYXNzIGNvbnN0cnVjdG9yKi8KICAgIGZpcnN0KG90aGVyKTsvKnNlbmRpbmcgdGVtcGxhdGVkIGNsYXNzIGFzIHBhcmFtZXRlcnMqLwogICAgc2Vjb25kKG90aGVyKTsKfQo=