Calls `this(this)` extra with delegate stuff in the code
    Ali Çehreli via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Sat Jan 21 19:42:21 PST 2017
    
    
  
On 01/21/2017 07:22 PM, Basile B. wrote:
> On Sunday, 22 January 2017 at 00:31:38 UTC, Ali Çehreli wrote:
>> On 01/21/2017 03:36 PM, Ali Çehreli wrote:
>>
>> > Change the signature and it works without copies:
>> >
>> >     this(const(this)) {
>> >         // ...
>> >     }
>>
>> Ugh... :( It's not a post-blit. Then what is it?
>>
>> Ali
>
> This is a __ctor that takes another instance as param. The param name is
> not specified, i.e
>
> struct Foo
> {
>     this(const(this)){}
> }
>
> is the same as
>
> struct Foo
> {
>     this(const(this) param){}
> }
>
> since __PRETTY__FUNCTION__ in the function returns
>
>     "Foo Foo.this(const(Foo) _param_0) ref"
>
> That's strange.
> Isn't it mentioned somewhere in the specification that within a function
> declaration, "this" resolves to the type of the current aggregate ?
Wow! Thanks.
I know about 'alias this' but this (pun!) is new to me. TIL indeed and 
WAT!!!! (four exclamation marks is right in this case. :o) )
import std.stdio;
struct S {
     void foo(this a = () {
             static assert(is(this));     // 'this' is a type
             return S();
         }()) {
         static assert(is(typeof(this))); // 'this' is an expression
         writeln("foo called for ", this);
     }
                                          // WAT!!!!
}
void main() {
     auto s = S();
     s.foo(s);
}
Ali
    
    
More information about the Digitalmars-d-learn
mailing list