I was compiling a C++ program in Cygwin using g++ and I had a class whose constructor had no arguments. I had the lines:
MyClass myObj();
myObj.function1();
And when trying to compile it, I got the message:
error: request for member ‘function1’ in ‘myObj’, which is of non-class type ‘MyClass ()()’
After a little research, I found that the fix was to change that first line to
MyClass myObj;
I could swear I’ve done empty constructor declarations with parentheses in C++ before. Is this probably a limitation of the compiler I’m using or does the language standard really say don’t use parentheses for a constructor without arguments?
Although
MyClass myObj();could be parsed as an object definition with an empty initializer or a function declaration the language standard specifies that the ambiguity is always resolved in favour of the function declaration. An empty parentheses initializer is allowed in other contexts e.g. in anewexpression or constructing a value-initialized temporary.