Перегрузка унарного оператора &

Рассмотрим класс с перегруженным унарным оператором & (Address-of). Пусть это будет класс A

template <class C>
class A
{
public:
    C * operator &()
    {
        return &data;
    }
    //...
private:
    C data;
}

Теперь я хочу передать какой-то функции указатель типа A , чтобы заполнить ее данными . Назовем его f

void f(A * auto_containter)
{
    //...
}

. Но ясно, почему приведенный ниже код не работает (даже не компилируется). Причина в том, что вызывается перегруженный оператор.

A a;
f(&a);

Вопрос следующий:

Есть ли какой-либо синтаксис для передачи адреса a в f ? Если нет, то для меня очень странно, почему разрешено перегружать унарный оператор & , потому что это делает код более ошибочным и трудным для понимания. Или есть какие-то другие причины?

16
задан Mihran Hovsepyan 20 June 2011 в 12:37
поделиться