#include <iostream>
template <typename T>
T tmin(T a, T b) {
std::cout << "template T" << std::endl;
return a < b ? a: b;
}
template<> double tmin<double>(double a, double b) {
std::cout << "template double" << std::endl;
return a < b ? a: b;
}
int main(int argc, char** argv) {
std::cout<< "double: " << tmin<>(5.0, 6.5)<<std::endl;
std::cout<< "int: " << tmin<>(5, 6)<<std::endl;
return ( 0 );
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ClQgdG1pbihUIGEsIFQgYikgewogICAgc3RkOjpjb3V0IDw8ICJ0ZW1wbGF0ZSBUIiA8PCBzdGQ6OmVuZGw7CiAgICByZXR1cm4gYSA8IGIgPyBhOiBiOwp9Cgp0ZW1wbGF0ZTw+IGRvdWJsZSB0bWluPGRvdWJsZT4oZG91YmxlIGEsIGRvdWJsZSBiKSB7CiAgICBzdGQ6OmNvdXQgPDwgInRlbXBsYXRlIGRvdWJsZSIgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIGEgPCBiID8gYTogYjsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CiAgICBzdGQ6OmNvdXQ8PCAiZG91YmxlOiAiIDw8IHRtaW48Pig1LjAsIDYuNSk8PHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dDw8ICJpbnQ6ICIgPDwgdG1pbjw+KDUsIDYpPDxzdGQ6OmVuZGw7CiAgICByZXR1cm4gKCAwICk7Cn0K