On Sun, Jul 15, 2012 at 1:41 PM, Benjamin Thaut <[email protected]>wrote:
> Am 15.07.2012 02:02, schrieb Timon Gehr: > > On 07/15/2012 12:55 AM, Benjamin Thaut wrote: >> >>> Am 14.07.2012 19:30, schrieb Gor Gyolchanyan: >>> >>>> On Sat, Jul 14, 2012 at 9:23 PM, Benjamin Thaut <[email protected] >>>> <mailto:[email protected]**>> wrote: >>>> >>>> Am 14.07.2012 19:21, schrieb kenji hara: >>>> >>>> 2012/7/15 Benjamin Thaut <[email protected] >>>> <mailto:[email protected]**>>: >>>> >>>> The only problem about this is: >>>> >>>> class Fruit >>>> { >>>> class Seed { >>>> void SetFruit(Fruit fruit) >>>> { >>>> this.outer = fruit; >>>> >>>> >>>> Setting to pseudo variable 'outer' should be rejected in >>>> compilation. >>>> Please report it to bugzilla. >>>> >>>> } >>>> } >>>> } >>>> >>>> class Apple: Fruit >>>> { >>>> void AppleOnlyMethod(){ ... } >>>> >>>> class AppleSeed: Fruit.Seed { >>>> void DoSomething() >>>> { >>>> AppleOnlyMethod(); >>>> } >>>> } >>>> >>>> auto GetNewSeed() { return new AppleSeed(); } >>>> } >>>> >>>> auto apple = new Apple(); >>>> auto seed = apple.GetNewSeed(); >>>> seed.SetFruit(new Fruit()); >>>> seed.DoSomething(); //what happens here? >>>> >>>> Kind Regards >>>> Benjamin Thaut >>>> >>>> >>>> Kenji Hara >>>> >>>> >>>> I will not report this, beacuse it will break my custom new operator >>>> (template) for inner classes ;-) >>>> >>>> Kind Regards >>>> Benjamin Thaut >>>> >>>> >>>> That's most unwise, because if it's not supposed to be like that it will >>>> get fixed anyway, so you better start replacing your custom new >>>> operator. >>>> >>>> -- >>>> Bye, >>>> Gor Gyolchanyan. >>>> >>> >>> Replacing my custom new operator exactly by what? Overloading the build >>> in new is deprecated... >>> >>> >> class C{ >> class D{ >> >> } >> } >> void main(){ >> auto c = new C; >> auto buf = new void[__traits(**classInstanceSize, C.D)]; >> (cast(byte[])buf)[] = typeid(C.D).init[]; >> auto d = cast(C.D)buf.ptr; >> static if(is(typeof(d.__ctor()))) d.__ctor(); >> enum offset=d.outer.offsetof; >> static assert(offset%C.sizeof==0); >> (cast(C[])buf)[offset/C.**sizeof]=c; >> assert(d.outer is c); >> } >> > > Yes of course I can assign the reference by computing the address and then > using that to assign it. But the point here is, that this is currently the > only bug that is hepling me in what I'm doing, and I rather want the 7 > other bugs I reported so far to be fixed, rather then the one that helps me. > > Kind Regards > Benjamin Thaut > > Don't you understand? It doesn't matter how much a bug helps you (or anything else for that matter) if it's a bug - it's gonna be fixed. If you decided to abuse a bug - it's your problem and your problem alone. The earlier you start getting rid of that design, the easier it will be when the bug gets inevitable fixed. -- Bye, Gor Gyolchanyan.
