Non-type template parameters (NTTP) were already in the original standard, they've existed since C++ had templates.
Being able to use "auto" for the type of the NTTP was new in C++17; and using class types like std::array for NTTPs was only added in C++20.