Como imprimir o endereço de um ponteiro de método em C +

Por exemplo

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);
}

A função stream_print () sempre imprime "1", o que obviamente não é o que eu quero. O printf_print não é compilado porque p não pode ser convertido em vazio *.

O que eu preciso é de um identificador exclusivo para um ponteiro de método que eu possa armazenar em um contêiner. Sei que isso parece uma má ideia, mas estou desenvolvendo um pequeno brinquedo para testes de unidade que pode se beneficiar dele. Não estou preocupado com sobrecargas do método, sei como obter o ponteiro para uma sobrecarga específica.

Estou usando o g ++ 4.4.3 com o C ++ 0x ativad

Me avise se tiver alguma dúvida.

questionAnswers(4)

yourAnswerToTheQuestion