On Thursday, 25 February 2016 at 20:14:20 UTC, Marc Schütz wrote:
On Thursday, 25 February 2016 at 17:33:34 UTC, Jonathan M Davis wrote:
Actually, both of your examples compile for me - both with master and with 2.070.0. I'm running on x86_64 FreeBSD (which you probably aren't), which shouldn't matter for this sort of error, but I suppose that it's possible that it's somehow system-specific, much as I wouldn't expect it to be. So, I don't what to say. :|

You need to compile with `-unittest`.

Ah, yes. I see now. And yes, that fails to compile.

Well, given that you have types referring to each other, it's not all that hard to get a circular definition error. The most obvious is when you do something like

    struct A
    {
        B b;
    }

    struct B
    {
        A a;
    }

And while the code in question doesn't do anything that blatant, it is having types refer to each other. What's incredibly weird is that if the RefCounted!(Payload, RefCountedAutoInitialize.no) is changed to Payload, the code works. If there were going to be a circular definition problem, then I'd think that it would occur without RefCounted being involved.

I'd suggest copying RefCounted to your local file and using that version of it rather than introducing std.typecons into the mix, and then use dustmite to reduce it. Then you can track down which part of RefCounted is causing the problem. dustmite is now released with dmd, I believe, so you shouldn't need to track it down, and instructions for it can be found here:

https://github.com/CyberShadow/DustMite/wiki

- Jonathan M Davis

Reply via email to