#include <mutex>
#include <iostream>
//std::recursive_mutex cout_mutex;
std::mutex cout_mutex;
// changed to recursive_mutex to avoid deadlock
template <typename Arg>
void mywrite(Arg t)
{
std::cout << t << std::endl;
}
template<typename Arg, typename... Args>
void mywrite(Arg a, Args... tail)
{
cout_mutex.lock();
std::cout << a << std::endl;
mywrite(tail...);
//mywrite(std::forward<Args>(tail)...);
cout_mutex.unlock();
}
int main()
{
mywrite(1,2,3);
mywrite(1,2,3,4,5,6,7,9.1,'a');
return 0;
}