Re: Why has base class protection been deprecated?

2012-04-24 Thread David Nadlinger

On Tuesday, 24 April 2012 at 12:22:14 UTC, David Bryant wrote:
This bothers me for two reasons: firstly it's not a base class, 
and secondly, it's a standard OO pattern of mine.


What's up with this?


Generally (and slightly inaccurately) speaking, D follows the 
Java model for inheritance rather than the C++ one, where base 
class protection attributes simply do not exist.


Besides that, I'm not quite sure what privately inheriting an 
interface would buy you – there would be no implementation to 
inherit anyway (except for final interface methods, but I doubt a 
valid use case for this would be easy to find)?


David


Re: Why has base class protection been deprecated?

2012-04-24 Thread David Bryant

On 04/24/2012 11:47 PM, David Bryant wrote:

On 04/24/2012 11:07 PM, Don Clugston wrote:

On 24/04/12 15:29, David Bryant wrote:


Because it doesn't make sense. All classes are derived from Object.
That
_has_ to be public, otherwise things like == wouldn't work.



Does the same apply for interfaces? I'm specifically implementing an
interface with non-public visibility. This shouldn't affect the
visibility of the implicit Object base-class.


Right. Only classes are affected.


Ok...so I still don't understand why the original example shouldn't
compile. I'm not trying to change the visibility of the base class but
rather the visibility of the interface.


To be clear: my subject line is misleading. I used that text because 
it's what came out of the compiler's mouth. I do understand your 
reasoning why you can't change the visibility of a base class, just not 
for an interface.


Re: Why has base class protection been deprecated?

2012-04-24 Thread David Bryant

On 04/24/2012 11:07 PM, Don Clugston wrote:

On 24/04/12 15:29, David Bryant wrote:


Because it doesn't make sense. All classes are derived from Object. That
_has_ to be public, otherwise things like == wouldn't work.



Does the same apply for interfaces? I'm specifically implementing an
interface with non-public visibility. This shouldn't affect the
visibility of the implicit Object base-class.


Right. Only classes are affected.


Ok...so I still don't understand why the original example shouldn't 
compile. I'm not trying to change the visibility of the base class but 
rather the visibility of the interface.


Re: Why has base class protection been deprecated?

2012-04-24 Thread Don Clugston

On 24/04/12 15:29, David Bryant wrote:


Because it doesn't make sense. All classes are derived from Object. That
_has_ to be public, otherwise things like == wouldn't work.



Does the same apply for interfaces? I'm specifically implementing an
interface with non-public visibility. This shouldn't affect the
visibility of the implicit Object base-class.


Right. Only classes are affected.


Re: Why has base class protection been deprecated?

2012-04-24 Thread David Bryant


Because it doesn't make sense. All classes are derived from Object. That
_has_ to be public, otherwise things like == wouldn't work.



Does the same apply for interfaces? I'm specifically implementing an 
interface with non-public visibility. This shouldn't affect the 
visibility of the implicit Object base-class.


Re: Why has base class protection been deprecated?

2012-04-24 Thread Don Clugston

On 24/04/12 14:22, David Bryant wrote:

With the dmd 2.059 I have started getting the error 'use of base class
protection is deprecated' when I try to implement an interface with
private visibility, ie:

interface Interface { }

class Class : private Interface { }

$ dmd test.d
test.d(4): use of base class protection is deprecated

This bothers me for two reasons: firstly it's not a base class, and
secondly, it's a standard OO pattern of mine.

What's up with this?

Thanks,
Dave


Because it doesn't make sense. All classes are derived from Object. That 
_has_ to be public, otherwise things like == wouldn't work.


Previously, the compiler used to allow base class protection, but it 
ignored it.