¿Cómo imprimo la dirección de un puntero de método en C ++?

Por ejemplo

struct A { void m() { } };

void stream_print() {
  void(A::*p)(void) = &A::m;
  std::cerr << p << std::endl;
}

void printf_print() {
  void(A::*p)(void) = &A::m;
  fprintf(stderr, "%p", p);
}

La función stream_print () siempre imprime "1", que obviamente no es lo que quiero. Printf_print no se compila porque p no se puede convertir a void *.

Lo que necesito es un identificador único para un puntero de método que pueda almacenar en un contenedor. Sé que esto suena como una mala idea, pero estoy desarrollando un pequeño juguete para pruebas unitarias que puede beneficiarse de él. No me preocupan las sobrecargas del método, sé cómo llevar el puntero a una sobrecarga específica.

Estoy usando g ++ 4.4.3 con C ++ 0x habilitado.

Avísame si tienes dudas.

Respuestas a la pregunta(4)

Su respuesta a la pregunta