Two kinds of tag types: foo_t and foo_tag
foo_t and foo_tagIn C++, when we have a type that carries no data — whose only “identity” is its type —
we conventionally call that a “tag type.” When you see code like struct X {}; it’s
often the case that X is a tag type. However, not all tag types are created equal:
there are at least two major disjoint use-cases for tag types, and the STL (as of 2025)
therefore uses two distinct naming conventions for their identifiers.
There is no widely recognized nomenclature for these two kinds of tag types, as far as I know, so I’m going to call them disambiguation tags and concept tags.
