On Thursday, 15 July 2021 at 17:30:05 UTC, jfondren wrote:
On Thursday, 15 July 2021 at 17:21:45 UTC, Tejas wrote:
I can do it like this in C++:
```
template<class abc>
class def
{
    friend typename abc;
}
```

I am just hopelessly confused on how to achieve the same in D.

Uncharitably: D is a friendless language. Charitably: D is so much more friendly that instead of a short explicit list of friends, D has a large implicit list of friends: everything else in a module.

That's why this works:

```d
class Secret {
    private int id;
}

void main() {
    import std.stdio : writeln;

    auto s = new Secret;
    writeln("visible to me: ", s.id);
}
```

But this doesn't:

```d
void main() {
    import std.stdio : writeln;
    import secret : Secret;

    auto s = new Secret;
    writeln("visible to me: ", s.id);
}
```

Error: no property `id` for type `secret.Secret`

I'm sorry, I should've explicitly mentioned I'm interested in learning how to do friend injection in D.

I know that access specifiers operate at module scope, seen a few posts about that here already.
Thank you for answering though.

Reply via email to