#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) -> typename std::common_type<T0, T1, Ts...>::type
{
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+CmF1dG8gdm1pbihUMCYmIHZhbDEsIFQxJiYgdmFsMiwgVHMmJi4uLiB2cykgLT4gdHlwZW5hbWUgc3RkOjpjb21tb25fdHlwZTxUMCwgVDEsIFRzLi4uPjo6dHlwZQp7CglyZXR1cm4gdmFsMSA8IHZhbDIgPwoJCXZtaW4odmFsMSwgc3RkOjpmb3J3YXJkPFRzPih2cykuLi4pIDoKCQl2bWluKHZhbDIsIHN0ZDo6Zm9yd2FyZDxUcz4odnMpLi4uKTsKfQoKCmludCBtYWluKCkKewoJaW50IHggPSA3OwoJaW50IHkgPSAzOwoJaW50JiB6MCA9IHg7CglpbnQmIHoxID0geTsKCSgoejA8ejEpP3owOnoxKT0yOwovLwl2bWluKHowLCB6MSkgPSAyOwoJc3RkOjpjb3V0IDw8IHggPDwgIiwiIDw8IHkgPDwgIlxuIjsKCWNvdXQgPDwgdm1pbigzLCAyLCAwLjksIDIsIDUpIDw8IGVuZGw7CgkKCWNvdXQgPDwgdm1pbigzLiwgMS4yLCAxLjMsIDIuLCA1LjIpIDw8IGVuZGw7CgoJcmV0dXJuIDA7Cn0=