#include <iostream>
using namespace std;
template<typename T>
T&& vmin(T&& val)
{
return std::forward<T>(val);
}
template<typename T0, typename T1, typename... Ts>
auto vmin(T0&& val1, T1&& val2, Ts&&... vs)
{
return val1 < val2 ?
vmin(val1, std::forward<Ts>(vs)...) :
vmin(val2, std::forward<Ts>(vs)...);
}
int main()
{
int x = 7;
int y = 3;
int& z0 = x;
int& z1 = y;
((z0<z1)?z0:z1)=2;
// vmin(z0, z1) = 2;
std::cout << x << "," << y << "\n";
cout << vmin(3, 2, 0.9, 2, 5) << endl;
cout << vmin(3., 1.2, 1.3, 2., 5.2) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpUJiYgdm1pbihUJiYgdmFsKQp7CglyZXR1cm4gc3RkOjpmb3J3YXJkPFQ+KHZhbCk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUuLi4gVHM+CmF1dG8gdm1pbihUMCYmIHZhbDEsIFQxJiYgdmFsMiwgVHMmJi4uLiB2cykKewoJcmV0dXJuIHZhbDEgPCB2YWwyID8KCQl2bWluKHZhbDEsIHN0ZDo6Zm9yd2FyZDxUcz4odnMpLi4uKSA6CgkJdm1pbih2YWwyLCBzdGQ6OmZvcndhcmQ8VHM+KHZzKS4uLik7Cn0KCgppbnQgbWFpbigpCnsKCWludCB4ID0gNzsKCWludCB5ID0gMzsKCWludCYgejAgPSB4OwoJaW50JiB6MSA9IHk7CgkoKHowPHoxKT96MDp6MSk9MjsKLy8Jdm1pbih6MCwgejEpID0gMjsKCXN0ZDo6Y291dCA8PCB4IDw8ICIsIiA8PCB5IDw8ICJcbiI7Cgljb3V0IDw8IHZtaW4oMywgMiwgMC45LCAyLCA1KSA8PCBlbmRsOwoJCgljb3V0IDw8IHZtaW4oMy4sIDEuMiwgMS4zLCAyLiwgNS4yKSA8PCBlbmRsOwoKCXJldHVybiAwOwp9