The following is a common typo with language newcomers, who think that they are defining an object but are actually declaring a function:

```
struct T
{
   void foo() {}
};

int main()
{
   T obj();
   obj.foo();
}

```

GCC 4.1.2's error is:

```
In function 'int main()':
Line 9: error: request for member 'foo' in 'obj', which is of non-class type 'T ()()'
compilation terminated due to -Wfatal-errors.

```

Why is the reported type in the message `T ()()`? I'd have expected `T ()`.