Array operation for computing the dot product?

Walter Bright newshound1 at digitalmars.com
Fri Feb 5 16:50:43 PST 2010


retard wrote:
> Fri, 05 Feb 2010 16:03:22 -0800, Walter Bright wrote:
> 
>> retard wrote:
>>> Fri, 05 Feb 2010 13:24:44 -0800, Walter Bright wrote:
>>>
>>>> retard wrote:
>>>>>   {protection-attr} == perhaps one of these
>>>>>   {public|protected|package|
>>>>> private} - I have no effing clue what this does
>>>> It actually does the same thing as it does in C++ (with the addition
>>>> of package).
>>> I see. I only noticed now that dmd actually does enforce this rule in
>>> some cases. Unfortunately the rule is checked only statically when it
>>> can be checked. If you access the object via base class or interface
>>> type reference, a runtime check is not made unlike in c++.
>> There must be some misunderstanding here. There are no runtime access
>> checks in C++, it is all done statically at compile time.
> 
> Thanks. It seems I have been testing this with a buggy c++ compiler or 
> can't remember what was the problem previously. I now tried with gcc 
> 4.4.3 and this is how D and C++ differ:
> 
> ---
> 
> class Foo {
>   public:
>   void bar() {}
> };
> 
> class Bar : private Foo {
> };
> 
> int main() {
>   Foo *a = new Bar();
>   a->bar();
> }
> 
> test.cpp: In function ‘int main()’:
> test.cpp:10: error: ‘Foo’ is an inaccessible base of ‘Bar’
> 
> ---
> 
> module m1;
> 
> class Foo {
>   public void bar() {}
> }
> 
> class Bar : private foo {
> }
> 
> module m2;
> import m1;
> 
> void main() {
>   Foo a = new Bar();
>   a.bar();
> }
> 
> // compiles and runs just fine

That's a bug in dmd. It should behave like the C++ does.

> // Changing the 'Foo a = ...' into 'Bar a = ...' makes this an error




More information about the Digitalmars-d mailing list