Deslocamento do ponteiro de membro sem instância temporária

Eu gostaria de obter o deslocamento de uma variável de membro de layout padrão quando fornecido com um apontador para essa variável. Não posso usaroffsetof desde que eu tenho um ponteiro e não um nome. O código atual que eu tenho é algo parecido com isso, e eu estou querendo saber se existe uma maneira compatível com os padrões para se livrar dodummy variável.

template<class T>
struct {
  ptrdiff_t get_offset( int (T::*mem) )
  {
    T dummy;
    return reinterpret_cast<char*>(&(dummy.*mem)) 
      - reinterpret_cast<char*>(&dummy);
  }
};

Esta função só deve ser chamada comint pontos de variável de membro (isto é intencional).

Estou certo de que o compilador não cria realmentedummy variável, mas ainda seria bom se eu pudesse me livrar disso. Eu não posso usar um ponteiro nulo desde dereferencing null não está definido (embora provavelmente funciona em todos os compiladores comuns). Uma solução C ++ 03 seria boa, ou uma solução C ++ 11 também é de interesse (mas não utilizável por mim agora).

NOTA: Eu já estou ciente de que isso é apenas compatível com os padrões T é um tipo de layout padrão.

questionAnswers(3)

yourAnswerToTheQuestion