On Mon, 28 Dec 2009 10:40:58 -0500, Ali Çehreli <[email protected]> wrote:
One issue remains, which prompted me to open this thread in the first
place:
I wanted to experiment with defining opCall for that struct:
struct S
{
int x;
int y;
const int opCall(int p0, int p1)
{
return p0 + p1;
}
}
This does not compile anymore:
auto s = S(1, 2);
s(3, 4); // hoping to call opCall
But compiler error instead:
Error: function expected before (), not s of type int
See, the type of 's' is 'int', meaning that S(1,2) is not a constructor
but a call to opCall. (This behavior documented on the struct spec page.)
Here is a consistent deduction of that behavior:
- S(1,2) is always the opCall
- if the programmer doesn't define an opCall, the automatic one is
called and the automatic one initializes the members
Removing s(3, 4), you get the following error message:
testbug.d(14): Error: need 'this' to access member opCall
So it appears that the compiler isn't outputting this error message when
it should.
-Steve