See, it’s clear you’re hung up on specifics of particular implementations,
not on how the language feature is defined at all.
No, it's in the definition of C++ templates. And I quote §14, clause 1:
A template defines a family of classes, functions, or concept maps, or
an alias for a family of types.
As far as the standard is concerned, Foo<int> and Foo<long> would be
very distinct types. It might be that the compiler makes them one single
entity, but it can only do that under §1.9, clause 1:
The semantic descriptions in this International Standard define a
parameterized nondeterministic abstract machine. This International
Standard places no requirement on the structure of conforming
implementations. In particular, they need not copy or emulate the
structure of the abstract machine. Rather, conforming implementations
are required to emulate (only) the observable behavior of the abstract
machine as explained below.
i.e., "you don't have to actually implement this specification so long
as a valid program can't tell that you aren't."
See, it's clear you really haven't read the specs you're trying to
language lawyer with us on.