Teach the unsequenced operation checker about references and, members (including static membersrs) and structured bindings. To do this introduce a class `MemoryLocation` which will approximate C++ memory locations. We then modify the method `getObject` (renamed to `getMemoryLocation`) to follow references, We then modify the method `getObject` (renamed to `getMemoryLocation`) to follow references and handle membershandle members and look through bindings. We also update the diagnostic message. The rest of `SequenceChecker` is not modified, The rest of `SequenceChecker` is not modifiedexcept that we make it const-correct.
We don't handle bit-fields for now but I plan to do this later. I also plan to teach it about the C++17 sequencing rules, and fix a number of corner cases around `||`currently do not handle bit-fields in any particular way, `&&` and `?:` (D57747 for `||`,but ideally we should take into account that two distinct bit-fields can be in the same memory location. `&&` and `?:`).
The tests modified in this patch are introduced in D57661This is marked as TODO.