#include <string.h>
template <typename TYPE>
TYPE& Max(TYPE& a, TYPE& b)
{
return (a > b ? a : b);
}
template < >
char*& Max<char*&>(char*& a, char*& b)
{
return (strcmp(a, b) > 0) ? a : b;
}
template < >
const char*& Max<const char*>(const char*& a, const char*& b)
{
return (strcmp(a, b) > 0) ? a : b;
}
int main()
{
float a = 3.14;
float b = 2.718;
float c = Max(a, b);
char *ca = "abc";
char *cb = "def";
char *cmp = Max(ca, cb); // error (E2015)
}
I2luY2x1ZGUgPHN0cmluZy5oPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFRZUEU+ClRZUEUmIE1heChUWVBFJiBhLCBUWVBFJiBiKQp7CiAgICByZXR1cm4gKGEgPiBiID8gYSA6IGIpOwp9Cgp0ZW1wbGF0ZSA8ID4KY2hhciomIE1heDxjaGFyKiY+KGNoYXIqJiBhLCBjaGFyKiYgYikKewogICAgcmV0dXJuIChzdHJjbXAoYSwgYikgPiAwKSA/IGEgOiBiOwp9Cgp0ZW1wbGF0ZSA8ID4KY29uc3QgY2hhciomIE1heDxjb25zdCBjaGFyKj4oY29uc3QgY2hhciomIGEsIGNvbnN0IGNoYXIqJiBiKQp7CiAgICByZXR1cm4gKHN0cmNtcChhLCBiKSA+IDApID8gYSA6IGI7Cn0KCmludCBtYWluKCkKewogICAgZmxvYXQgYSA9IDMuMTQ7CiAgICBmbG9hdCBiID0gMi43MTg7CiAgICBmbG9hdCBjID0gTWF4KGEsIGIpOwoKICAgIGNoYXIgKmNhID0gImFiYyI7CiAgICBjaGFyICpjYiA9ICJkZWYiOwogICAgY2hhciAqY21wID0gTWF4KGNhLCBjYik7ICAgIC8vIGVycm9yIChFMjAxNSkKfQo=