http://d.puremagic.com/issues/show_bug.cgi?id=6695
--- Comment #9 from luka8088 <luka8...@owave.net> 2011-09-20 12:16:01 PDT --- (In reply to comment #8) > (In reply to comment #7) > > I agree that maybe this is not a bug, but I don't agree with the explanation > > ... > > > > Documentation says "Both immutable and const are transitive, which means > > that > > any data reachable through an immutable reference is also immutable, and > > likewise for const." > > Note the key element here is *data*, not *functions*. > > > So in this example: > > [snip] > > > From the documentation, both > > typeid(typeof(a1.b1.d)) > > and > > typeid(typeof(a1.b1.f)) > > should be either mutable or immutable, right ? > > typeid(typeof(a1.b1.d)) is a method, not a piece of data. In fact, when you > say typeof(a1.b1.d), you might as well have written typeof(b.d). > > There is a confusing concept to grasp, and it's made harder because of the > terminology. An immutable function is not actually immutable. An immutable > function is a member function that *can be called* on an immutable instance of > the struct/class. The immutable modifier only affects the 'this' pointer, > even > though it seems like it's applied to the entire function. > > Remember that all member functions have a hidden this pointer? If we were > forced to write them out, then this: > > struct S > { > void foo () immutable {} > void foo2() const {} > void foo3() {} > } > > becomes this: > > struct S > { > void foo (ref immutable(S) this) {} > void foo2(ref const(S) this) {} > void foo3(ref S this) {} > } > > Now you can see why its clear you cannot call for instance foo with a > non-immutable instance of S. The reason the modifiers are applied to the > function is because there's no parameter for them to cling to -- the parameter > is hidden. > > If you want to discuss this more, I think the d.learn newsgroup is probably > best, or you can email me directly. I'd be happy to answer any questions on > it. OK, I understand it now, you are right, thank you very much for detailed explanation ! -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------