Недопустимый объект после исключения операции копирования? [дубликат]

Possible Duplicate:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?
Most vexing parse: why doesn't A a(()); work?

Это меня бесит. Может быть, это слишком просто.

struct Foo
{
  Foo() {}
  Foo(const Foo& f) {}
  void work() {}
};

int main()
{
  Foo f( Foo() );
  f.work();
}

GCC 4.6 дает мне:

error: request for member ‘work’ in ‘f’, which is of non-class type ‘Foo(Foo (*)())’

После исключения операции копирования эффективный код может иметь вид:

int main()
{
  Foo f;
  f.work();
}

Но почему я не могу позвонить work()??

Изменить:

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

0
задан Community 23 May 2017 в 12:29
поделиться