[...]
That clarifies a lot. If nothing else, I realise now I can't have `opBinaryRight(string op : "in")` the way I had hoped.
What I have now probably doesn't cover 100% of every use-case, but it should do for my scope. I'm much more confident using this compared to the naked `shared` AA I started with.
Thanks everyone for the help.