digitalmars.D.learn - Do constructors in D support the privacy keyword?
- Gary Willoughby (12/12) Sep 07 2013 Do constructors in D support a privacy keyword? I'm guessing not
- anonymous (5/17) Sep 07 2013 In D, private symbols are accessible throughout their module. Try
- H. S. Teoh (9/25) Sep 07 2013 Did you put the 'new' line in the same file as class T? In D, 'private'
- Gary Willoughby (3/30) Sep 07 2013 It was inside the same module. I didn't realise that about
- Michael (1/1) Sep 07 2013 In same module "private" acts like "friend" in C++.
Do constructors in D support a privacy keyword? I'm guessing not because if i declare one like this: class T { private this() { } } i can still instantiate the class like this: auto x = new T(); and there is no error thrown. Am i right in thinking the privacy keyword is ignored?
Sep 07 2013
On Saturday, 7 September 2013 at 18:37:11 UTC, Gary Willoughby wrote:Do constructors in D support a privacy keyword? I'm guessing not because if i declare one like this: class T { private this() { } } i can still instantiate the class like this: auto x = new T(); and there is no error thrown. Am i right in thinking the privacy keyword is ignored?In D, private symbols are accessible throughout their module. Try instantiating the class from another module and you should get an error.
Sep 07 2013
On Sat, Sep 07, 2013 at 08:37:05PM +0200, Gary Willoughby wrote:Do constructors in D support a privacy keyword? I'm guessing not because if i declare one like this: class T { private this() { } } i can still instantiate the class like this: auto x = new T(); and there is no error thrown. Am i right in thinking the privacy keyword is ignored?Did you put the 'new' line in the same file as class T? In D, 'private' means 'private to this module', not 'private to this class' as in C++. So 'new T()' should be compilable inside the same module, but not outside. If it still compiles outside, I'd say file a bug. T -- A bend in the road is not the end of the road unless you fail to make the turn. -- Brian White
Sep 07 2013
On Saturday, 7 September 2013 at 18:49:43 UTC, H. S. Teoh wrote:On Sat, Sep 07, 2013 at 08:37:05PM +0200, Gary Willoughby wrote:It was inside the same module. I didn't realise that about private. Thanks for the clarification.Do constructors in D support a privacy keyword? I'm guessing not because if i declare one like this: class T { private this() { } } i can still instantiate the class like this: auto x = new T(); and there is no error thrown. Am i right in thinking the privacy keyword is ignored?Did you put the 'new' line in the same file as class T? In D, 'private' means 'private to this module', not 'private to this class' as in C++. So 'new T()' should be compilable inside the same module, but not outside. If it still compiles outside, I'd say file a bug. T
Sep 07 2013