The implicit cast isn't exactly obvious / using TryFind directly isn't what someone coming from the outside of the class would think of doing. At first I was going to do a .find() != end, but then I realized TryFind effectively does everything I want (including the asserts).

In terms of computational complexity calling TryFind just adds a relatively small constant to the operation (the .find() should be the expensive part). In theory the compiler could inline that, and it would notice that the ternary adds nothing / could be eliminated. Practically if that becomes an actual perf issue, we can deal with it then. I don't think the ternary is bad enough perf wise.

The function becomes
```
    bool Contains(const TString &that) const {
      assert(this);
      return TryFind(that);
    }
```

Which I think is fairly simple, and a lot  more straightforward / easier to maintain than rewriting the object assert, and then calling .find() != .end()