I like to call C++ templates &quot;structurally typed&quot;, since  you can get some degree of that from SFINAE and composing templates together. They&#x27;re more pattern-matching based than type-based. This is reminiscent of how Go auto-impls interfaces, really.