Как я могу надежно получить адрес объекта, когда оператор & перегружен?

Рассмотрим следующую программу:

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 :'( 
}

Как мне получить адрес clyde ?

Я ищу решение, которое будет одинаково хорошо работать для всех типов объекты. Решение на C ++ 03 было бы неплохо, но меня тоже интересуют решения на C ++ 11. Если возможно, давайте избегать какого-либо поведения, зависящего от реализации.

Мне известен шаблон функции std :: addressof C ++ 11, но я не заинтересован в его использовании здесь: я хотел бы понять как разработчик стандартной библиотеки может реализовать этот шаблон функции.

167
задан einpoklum - reinstate Monica 11 October 2015 в 10:57
поделиться