That semicolon is redundant but shouldn't cause a problem. If I add
typedef int T;
and remove your question from the code, it compiles without any warnings at all under VS2017.
The convention is usually to use an underscore in a class member, not a parameter, but I don't see anything wrong with the code.