O operador está "encadeado" para ponteiros? [duplicado]

Possível duplicado:
Operador de sobrecarga ->

Oi,

Eu vi issooperator->() é encadeado (reaplicado) após ser avaliado, por exemplo:

struct Bar
{
  Bar() : m_str("Hello world!") {}
  const string* operator->() const { return &m_str; }
  string m_str;
};

struct Foo
{
  const Bar& operator->() const { return m_bar; }
  Bar m_bar;
};

int main()
{
  Foo f;
  cout << f->c_str() << endl;
  return 0;
}

funciona muito bem, o que requer trêsoperator->()&nbsp;a ser avaliada -Foo::operator->(), Bar::operator->()&nbsp;e resolução regular do ponteiro.

Mas não funcionará com ponteiros no meio - seFoo::operator->()&nbsp;retorna o ponteiro para Bar em vez de referência, ele não será compilado. O mesmo acontece comauto_ptr<auto_ptr<string>>&nbsp;por exemplo.

É específico para não sobrecarregadooperator->()&nbsp;portanto, é aplicado apenas uma vez e não causa encadeamento? É possível fazer o código abaixo funcionar sem usar(*ptr2)-> ...?

int main()
{
  string s = "Hello world";
  auto_ptr<string> ptr1(&s);
  auto_ptr<auto_ptr<string> > ptr2(&ptr1);
  cout << ptr1->c_str() << endl; // fine
  cout << ptr2->c_str() << endl; // breaks compilation
}

Obrigado!