Is it a bug that a parent class that access its own private members from derived classes gets deprecation warning?

nkm1 t4nk074 at openmailbox.org
Sun Apr 8 15:32:39 UTC 2018


On Saturday, 7 April 2018 at 20:14:49 UTC, bauss wrote:
> jesus that became a long title.
>
> Anyway as the title says, is it a bug that a parent class that 
> access its own private members from derived classes gets 
> deprecation warning?
>
> Scenario narrowed down:
>
> // module foo;
> class Foo
> {
>     private:
>     bool _baz;
>
>     public:
>     final void foos(T : Foo)(string key, T[] values)
>     {
>       if (values && values.length)
>       {
>         foreach (child; values)
>         {
>           child._isChild = true;
>         }
>       }
>     }
> }
>
> // module bar;
> class Bar : Foo
> {
> }
>
> The above in my case will give a deprecation warning that 
> "_baz" isn't visible from "Bar".

Well, template has nothing to do with it. Also, private members 
in D are private to the module, not to the class. Here's a 
reduced example:

--- foo.d ---
import bar;

class Foo
{
     private bool baz;
}

void test(Bar b)
{
     b.baz = true;
}

--- bar.d ---
import foo;

class Bar : Foo {}

void main()
{
     test(new Bar);
}

https://wiki.dlang.org/DIP22 mentions something called "look-up 
origin"; the meaning of that term is unclear to me...



More information about the Digitalmars-d mailing list