Pretty-print std :: tuple

Esta es una continuación de mi pregunta anterior sobre contenedores STL de impresión bonita, para lo cual logramos desarrollar una solución muy elegante y totalmente general.

En el siguiente paso, me gustaría incluir una bonita impresión parastd::tuple<Args...>, usando plantillas variadas (así que esto es estrictamente C ++ 11). Porstd::pair<S,T>, Simplemente digo

std::ostream & operator<<(std::ostream & o, const std::pair<S,T> & p)
{
  return o << "(" << p.first << ", " << p.second << ")";
}

Cuál es la construcción análoga para imprimir una tupla?

He intentado varias partes del desempaque de pila de argumentos de plantilla, pasando índices y usando SFINAE para descubrir cuándo estoy en el último elemento, pero sin éxito. No te cargaré con mi código roto; Esperemos que la descripción del problema sea lo suficientemente sencilla. Esencialmente, me gustaría el siguiente comportamiento:

auto a = std::make_tuple(5, "Hello", -0.1);
std::cout << a << std::endl; // prints: (5, "Hello", -0.1)

Bonus puntos por incluir el mismo nivel de generalidad (char / wchar_t, par delimitadores) que la pregunta anterior!

Respuestas a la pregunta(8)

Su respuesta a la pregunta