Come posso ottenere in modo affidabile l’indirizzo di un object quando l’operatore è sovraccarico?

Considera il seguente programma:

struct ghost { // ghosts like to pretend that they don't exist ghost* operator&() const volatile { return 0; } }; int main() { ghost clyde; ghost* clydes_address = &clyde; // darn; that's not clyde's address :'( } 

Come posso ottenere l’indirizzo di clyde ?

Sto cercando una soluzione che funzionerà egualmente bene per tutti i tipi di oggetti. Una soluzione C ++ 03 sarebbe bella, ma mi interessano anche le soluzioni C ++ 11. Se ansible, evitiamo qualsiasi comportamento specifico dell’implementazione.

Sono a conoscenza del modello di funzione std::addressof di C ++ 11, ma non mi interessa utilizzarlo qui: mi piacerebbe capire come un implementatore di libreria standard possa implementare questo modello di funzione.