Thread overview
RefCounted: conflicting overloads of refCountedPayload()
Jan 28, 2017
bitwise
Jan 28, 2017
bitwise
Jan 29, 2017
Dsby
Jan 29, 2017
bitwise
Jan 29, 2017
bitwise
January 28, 2017
I'm still hitting this bug on dmd 2.073.0:
https://issues.dlang.org/show_bug.cgi?id=13009

I'm having trouble creating a minimal repro, but the error is:

Error: std.typecons.RefCounted!(MyPayload, cast(RefCountedAutoInitialize)1).RefCounted.refCountedPayload called with argument types () matches both:
typecons.d(5198):  std.typecons.RefCounted!(MyPayload, cast(RefCountedAutoInitialize)1).RefCounted.refCountedPayload()
and:
typecons.d(5190):  std.typecons.RefCounted!(MyPayload, cast(RefCountedAutoInitialize)1).RefCounted.refCountedPayload()


Can't the second overload just be put in an 'else' for the 'static if'?:

https://github.com/dlang/phobos/blob/db204e0f8a4cc2d5235d95b5fb10dfcc9ea35048/std/typecons.d#L5296-L5312




January 28, 2017
On Saturday, 28 January 2017 at 20:14:29 UTC, bitwise wrote:
> I'm having trouble creating a minimal repro, but the error is:

Managed to get a repro working.
Commenting out the alias 'X' makes the error go away.
If someone can confirm my sanity, I'll file a bug for this.

---

struct S {
    struct Payload {
        int[] data;
    }

    RefCounted!(Payload, RefCountedAutoInitialize.yes) payload;
    alias X = typeof(payload.data[0]);
}

int main(string[] argv) {
    return 0;
}


main.d(196): Error: std.typecons.RefCounted!(Payload, cast(RefCountedAutoInitialize)1).RefCounted.refCountedPayload called with argument types () matches both:
typecons.d(5241):     std.typecons.RefCounted!(Payload, cast(RefCountedAutoInitialize)1).RefCounted.refCountedPayload()
and:
typecons.d(5233):     std.typecons.RefCounted!(Payload, cast(RefCountedAutoInitialize)1).RefCounted.refCountedPayload()
January 29, 2017
On Saturday, 28 January 2017 at 21:24:11 UTC, bitwise wrote:
> On Saturday, 28 January 2017 at 20:14:29 UTC, bitwise wrote:
>> [...]
>
> Managed to get a repro working.
> Commenting out the alias 'X' makes the error go away.
> If someone can confirm my sanity, I'll file a bug for this.
>
> [...]

I think the smart ref is better: https://github.com/huntlabs/SmartRef
January 29, 2017
On Sunday, 29 January 2017 at 03:12:52 UTC, Dsby wrote:
> I think the smart ref is better: https://github.com/huntlabs/SmartRef

Pretty decent implementation.

It's a shame that things like "make_shared_from_this" aren't properly possible in D. I think it's a small price to pay for not having to deal with multiple inheritance though.

I considered writing my own ref counted pointers as well. Among those considerations were the thought that I should make it "make_shared" by default, and leave wrapping windows HANDLE's and whatnot to a separate primitive. This obviates the need for the second pointer since the ref count _is_ the payload.

Weak pointers in D would be nice too, but I assume it won't be necessary if D ends up getting built in ARC. Also, I don't have any use for them right now.

January 29, 2017
On Saturday, 28 January 2017 at 20:14:29 UTC, bitwise wrote:
> I'm still hitting this bug on dmd 2.073.0:
> https://issues.dlang.org/show_bug.cgi?id=13009

Just reopened the old bug.
Good talk guys ;)