On Wed, 29 Jul 2009 14:08:18 -0400, Andrei Alexandrescu <seewebsiteforem...@erdani.org> wrote:

Steven Schveighoffer wrote:
It would be nice if the compiler could help by simply rejecting what it can reject (assignment to rvalues), but other than that, there's not much that can be done. This can be detected in simple cases, but in the case where the end point is a function, it will be difficult or impossible.

I think it is eminently possible, but we must figure a solution that doesn't complicate the language all too much.

Here is a struct, defined in a .di file:

struct S
{
  private int _c;
  int c();
  void c(int n);
}

struct S2
{
  S b();
}

Now, in your main file you have:

void main()
{
  S2 a;
  a.b.c = 3;
}

How in the world is the compiler supposed to know whether to allow this or not? What if the actual code for S looks like this:

struct S
{
  private int _c;
  int c() {return *(cast(int*)_c);}
  void c(int n) {*(cast(int*)_c) = n;}
}

Shouldn't this be allowed?

-Steve

Reply via email to