[Issue 3879] compile-time assertion error in mtype.c: foreach through associative array w/ templated-class as value

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Mar 5 12:07:21 PST 2010


http://d.puremagic.com/issues/show_bug.cgi?id=3879



--- Comment #2 from njb303 at gmail.com 2010-03-05 12:07:18 PST ---
(In reply to comment #1)
> This sounds like a duplicate of bug 3692.

I took a look at that bug and did a little further tinkering.  It seems you
might be correct.

I just removed the std.variant import directive that I hadn't mentioned (not
thinking it had anything to do with the problem) and commented-out an unrelated
class definition in the same file that used Variant, and the results are now:

1) The first line, that gave "__overloadset is not a template on line 100", now
compiles fine.

2) The "foreach (string k; _states.keys)" approach now compiles fine.

3) The "foreach (State!(T) s; _states.values)" approach now compiles fine.

4) The "foreach (char[] k; _states.keys.sort)" approach now gives an
appropriate error message (cannot implicily convert expression etc) instead of
crashing with an assertion.

5) The final approach where I do declare State!(T) as a new typedef called
'tstate' and then do "foreach (tstate s; _states.values)" gives an error
message instead of crashing -- "cannot implicitly convert expression"... which
is surprising, though unrelated to what this bug report is about, and I'm not
sure if I should submit another report on this particular thing because maybe
doing typedefs on templated-classes is intentionally not-allowed?

Anyway, I think you're right... removing any and all mention of std.variant
from the source file changed the situation entirely.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list