On 06/03/18 16:06, Steven Schveighoffer wrote:
On 3/6/18 8:56 AM, Steven Schveighoffer wrote:
So a bug report is in order. It should be decided one way or another -- either the context pointer is part of the struct type or it isn't.


There is a third possibility:

It's part of the type AND it's typed as const if it can be (i.e. none of the methods in the struct modify the context data, and any use of the context data implicitly casts from const).

-Steve

For what it's worth, I vote for option #2 (it isn't const even if the struct is), for the same reason that const structs can modify static variables - it's not part of the struct.

I'll phrase is another way, if this shouldn't compile:

unittest {
  int i;

  struct S {
    int a;

    void func() const {
      ++i;
    }
  }
}

Then neither should this:
struct S {
  static int i;
  int a;

  void func() const {
    ++i;
  }
}

I fail to see any reasoning[1] that disallows the former but allows the later.

Shachar

1 - That is obviously not true. I see the reasoning all too well. Static vars are like globals, and you're not getting to them via the struct's instance. I would argue that, as far as the programmer, however, there is no difference. There is no semantic difference between allowing the first and not the second.

Reply via email to