aha, thanks, so a workaround could be to avoid deletion in in a multiset while it is being iterated over:
void main() { multiset m=(<"Stone","2","%70">); multiset deletes=(<>); foreach(m;string k;int one) { if(k=="%70") { deletes[k]=1; break; } }
foreach(deletes;string k;) { m[k]=0; }
multiset direct_add=m-(<>); werror("%O %O\n\n", (array)direct_add, direct_add); }