#include <iostream>
#include <string>
#include <sstream>
#include <vector>

template<class T>
void func(const T& t)
{
    std::cout << t << std::endl;
}
 
template<class First, class... Rest>
void func(const First& first, const Rest&... rest)
{
    func(first);
    func(rest...);
}

template<class T>
std::ostream& operator<<(std::ostream& ofs, const std::vector<T>& vec)
{
	std::stringstream str;
	for(auto p = vec.begin(); p != vec.end(); p++)
		str << ',' << *p;

	return ofs << '{' << str.str().substr(1) << '}';
}


int main()
{
	std::vector<int> vec = {1, 2, 3};

	func(10, 10.5, std::string("hoge"), vec);
}
