struct A
{
  A* hello()
  {
    std;;cout _<< "Hello" << std::endl;
  }
  A* operator->()
  {
    std::cout << "A::oprator->()" << std::endl;
    return this;
  }
  A* operator[](const std::string& s)
  {
    std::cout << "A::operator[]()" << std::endl;
    return this;
  }
  A* operator()()
  {
    std::cout << "A::operator()()" << std::endl;
    return this;
  }
};
int main()
{
  A a;
  a->hello()   //OK
  a->();       //error
  a->["hello"];  //error
}
operator->でA*を返してるはずなのにエラーになったりならなかったり
どういうことでしょうか? vc7.1です