In RegexComponentSetMatcher, m_components can be a vector
In RegexComponentSetMatcher, m_components is a
set<shared_ptr<RegexComponentMatcher> > .
But each added member is a new, different shared_ptr:
Different shared_ptr always compare unequal, so adding to the set always adds a new member. Therefore, m_components can be a vector, which is more efficient, and less confusing since it really doesn't maintain set behavior.
(This issue is just an observation. You can abandon it if you want.)