On Tue, 21 Jun 2011 06:04:28 +0300, Jonathan M Davis <[email protected]> wrote:

It matters for stuff like NVI (Non-Virtual Inheritance). In that particular
case, you overload a private function but you can't call it. You couldn't
overload it if you couldn't see it. So, there _are_ cases where it matters, and it _is_ an important distinction. It's just that it matters infrequently enough that most people don't realize that there is such a distinction. But
distinction or not, I don't see why we couldn't just make it so that any
attempt to use a symbol where the clashing symbol can't be used anyway just
doesn't clash by ignoring the private symbol in such cases.

- Jonathan M Davis

Good example, is it only this or are there any others?
I am asking because i think this particular use case doesn't justify visibility but not access.
If i got it right, we are talking about something like this:

module base1;
private import base;
struct base1 : base {
}

module base2;
import base1;
struct base2 : base1 {
}

Shouldn't compiler just issue an error whenever base1 accessed outside of the module it belongs? With its current state, it just encourages bad design as far as i can see. First of all inheriting from a class/interface/struct that is imported private implies this new class is going to be an implementation detail, hidden from user. If it wasn't intended, why would you import it private?

Reply via email to