digitalmars.D.bugs - [Bug 49] New: Error instantiating a mixin with a private constructor
- d-bugmail puremagic.com (20/20) Mar 14 2006 http://d.puremagic.com/bugzilla/show_bug.cgi?id=49
- d-bugmail puremagic.com (22/22) Apr 12 2006 http://d.puremagic.com/bugzilla/show_bug.cgi?id=49
- d-bugmail puremagic.com (14/14) May 18 2006 http://d.puremagic.com/bugzilla/show_bug.cgi?id=49
- d-bugmail puremagic.com (10/17) May 18 2006 http://d.puremagic.com/bugzilla/show_bug.cgi?id=49
- d-bugmail puremagic.com (9/9) May 18 2006 http://d.puremagic.com/bugzilla/show_bug.cgi?id=49
- Bruno Medeiros (13/27) May 20 2006 Nope, I originally didn't read the thread (did now).
http://d.puremagic.com/bugzilla/show_bug.cgi?id=49 Summary: Error instantiating a mixin with a private constructor Product: D Version: 0.149 Platform: PC OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: daiphoenix lycos.com The following gives a compiler error (as in the comented line): template Baz() { private this() {} } class Foo { mixin Baz!(); // Error: .this is private } --
Mar 14 2006
http://d.puremagic.com/bugzilla/show_bug.cgi?id=49 daiphoenix lycos.com changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Error instantiating a mixin |Protection attributes of |with a private constructor |mixin instances are applied | |to a the wrong scope. Actually, this is part of the more general bug: Protection attributes of mixin instances are applied to the wrong scope. The following illustrates it: template Baz() { private void privfunc(){ } // private this() { } } class Foo { mixin Baz!(); void testfunc() { privfunc(); // Error: .privfunc is private } } --
Apr 12 2006
http://d.puremagic.com/bugzilla/show_bug.cgi?id=49 smjg iname.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |smjg iname.com Actually, it isn't clearly defined. It states: "Unlike a template instantiation, a template mixin's body is evaluated within the scope where the mixin appears, not where the template declaration is defined." This leaves open the question of where it's access-checked. There was a discussion on this a while back: http://www.digitalmars.com/d/archives/digitalmars/D/bugs/3101.html --
May 18 2006
http://d.puremagic.com/bugzilla/show_bug.cgi?id=49Actually, it isn't clearly defined. It states: "Unlike a template instantiation, a template mixin's body is evaluated within the scope where the mixin appears, not where the template declaration is defined." This leaves open the question of where it's access-checked. There was a discussion on this a while back: http://www.digitalmars.com/d/archives/digitalmars/D/bugs/3101.htmlIn the very next sentenced it is said: "It is analogous to cutting and pasting the body of the template into the location of the mixin." which I think clears it up. Copy&Paste is the semantics I've been considering as the spec. (still, this doesn't say anything of whether this is or is not, the ideal language behavior.) --
May 18 2006
http://d.puremagic.com/bugzilla/show_bug.cgi?id=49 The key word is "analogous". Not "identical". The differences include several of those listed here: http://www.digitalmars.com/d/pretod.html#mixins Did you even begin to read the thread I just linked to? But even so, the testcases you have expose a different bug altogether, in which access to private members within a module isn't always honoured. --
May 18 2006
d-bugmail puremagic.com wrote:http://d.puremagic.com/bugzilla/show_bug.cgi?id=49 The key word is "analogous". Not "identical". The differences include several of those listed here: http://www.digitalmars.com/d/pretod.html#mixins Did you even begin to read the thread I just linked to?Nope, I originally didn't read the thread (did now). The doc states (like you said): "Unlike a template instantiation, a template mixin's body is evaluated within the scope where the mixin appears, not where the template declaration is defined." I dunno how I missed this before, because I think the statement "a mixin's body is evaluated within the scope where the mixin appears" should be clear enough. The protection attributes are part of the body, and thus are "evaluated" where they appear. -- Bruno Medeiros - CS/E student http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
May 20 2006