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