#include <iostream>


using namespace std;


template<typename T>
T vmin(T val1, T val2)
{
	return val1 < val2 ? val1 : val2;
}

template<typename T, typename... Ts>
T vmin(T val1, T val2, Ts&&... vs)
{
	return val1 < val2 ?
		vmin(val1, std::forward<Ts>(vs)...) : vmin(val2, std::forward<Ts>(vs)...);
}


int main()
{
	cout << vmin(3, 2, 1, 2, 5) << endl;
	
	cout << vmin(3., 1.2, 1.3, 2., 5.2) << endl;

	return 0;
}