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