#include <iostream>
#include <cstring>
namespace my
{
const char* max(const char* lhs, const char* rhs)
{
return (strcmp(lhs, rhs) > 0) ? lhs : rhs;
}
template <typename T, typename... Args>
T const& max(T const& lhs, Args... args);
template<typename T>
T const& max (T const& a, T const& b)
{
return a < b ? b : a;
}
template<typename T, typename... Args>
T const& max(T const& lhs, Args... args)
{
return max(lhs, max(args...));
}
template<typename T, typename... Args>
const T* max(const T* lhs, Args... args)
{
return max(lhs, max(args...));
}
}
int main()
{
int n = my::max(7, 42, 68, 8, 100);
const char *s = my::max("aardvark", "apple", "violet");
std::cout << s << ',' << n << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KCm5hbWVzcGFjZSBteQp7CiAgICBjb25zdCBjaGFyKiBtYXgoY29uc3QgY2hhciogbGhzLCBjb25zdCBjaGFyKiByaHMpCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJjbXAobGhzLCByaHMpID4gMCkgPyBsaHMgOiByaHM7CiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICBUIGNvbnN0JiBtYXgoVCBjb25zdCYgbGhzLCBBcmdzLi4uIGFyZ3MpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBUIGNvbnN0JiBtYXggKFQgY29uc3QmIGEsIFQgY29uc3QmIGIpCiAgICB7CiAgICAgICAgcmV0dXJuIGEgPCBiID8gYiA6IGE7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KICAgIFQgY29uc3QmIG1heChUIGNvbnN0JiBsaHMsIEFyZ3MuLi4gYXJncykKICAgIHsKICAgICAgICByZXR1cm4gbWF4KGxocywgbWF4KGFyZ3MuLi4pKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmdzPgogICAgY29uc3QgVCogbWF4KGNvbnN0IFQqIGxocywgQXJncy4uLiBhcmdzKQogICAgewogICAgICAgIHJldHVybiBtYXgobGhzLCBtYXgoYXJncy4uLikpOwogICAgfQogICAgCn0KCmludCBtYWluKCkKewogICAgaW50IG4gPSBteTo6bWF4KDcsIDQyLCA2OCwgOCwgMTAwKTsKICAgIGNvbnN0IGNoYXIgKnMgPSBteTo6bWF4KCJhYXJkdmFyayIsICJhcHBsZSIsICJ2aW9sZXQiKTsKICAgIHN0ZDo6Y291dCA8PCBzIDw8ICcsJyA8PCBuIDw8IHN0ZDo6ZW5kbDsKICAgIHJldHVybiAwOwp9