On Friday, 4 September 2020 at 10:16:47 UTC, 60rntogo wrote:
Consider the following code.

foo.d
---
module foo;

struct Foo
{
  private int i;
}
---

main.d
---
void main()
{
  import std.stdio;
  import foo;

  auto x = Foo();
  writeln(x);
  // ++x.i;
  ++x.tupleof[0];
  writeln(x);
}
---

As expected, the commented line does not compile. If I uncomment it, I get the error "no property i for type foo.Foo". However, the rest of the code compiles just fine and outputs:
---
Foo(0)
Foo(1)
---

This appears to defeat the purpose of declaring i private. What am I missing?

It's a known issue: https://issues.dlang.org/show_bug.cgi?id=19326

There are some very good reasons to allow some access to private fields, though it should be more limited than is currently the case.

--
  Simen

Reply via email to