On Fri, Mar 09, 2012 at 11:24:46AM +0100, Timon Gehr wrote: > On 03/08/2012 09:06 PM, H. S. Teoh wrote: > >On Thu, Mar 08, 2012 at 02:50:50PM -0500, Steven Schveighoffer wrote: [...] > >>What is type slot, and how is it constructed? This snippit isn't > >>enough to provide help. > >[...] > > > >Slot is a struct, and slots is Slots*[]. But anyway, I found the > >problem. I needed to explicitly declare slot as: > > > > inout(Slot)* slot = ... > > > >because for whatever reason, auto turns it into inout(Slot*) which > >cannot be modified. > > Probably it does not. What is the type of the "slots" hashtable?
Here are the relevant declarations: struct Slot { Slot *next; hash_t hash; Key key; Value value; this(hash_t h, Key k, Value v) { hash = h; key = k; value = v; } } struct Impl { Slot*[] slots; size_t nodes; // Prevent extra allocations for very small AA's. Slot*[4] binit; } [...] > >I think inout is one of those things that really needs more thorough > >treatment for newbies, because coming from a C/C++ background I had > >no idea what was wrong. Now that I get it, it makes so much more > >sense. [...] > This is a general issue with how auto infers types. It would often be > useful to get the head-mutable type out of the type deduction instead > of the actual type. Yeah, that would be very useful. T -- Tech-savvy: euphemism for nerdy.