From cppreference.com
Usage
In the template parameter list of a
, typename can be used as an alternative to
to declare
and template template parameters(since C++17).
Inside a declaration or a definition of a template, typename can be used to declare that a
is a type.
typename can be used before a non-dependent qualified type name. It has no effect in this case.
See also