非类型模板形参

模板形参不必都是类型,非类型形参将用值代替。例如以下示例:

template <typename T, size_t N> void array_init(T (&param)[N]) {}

当进行以下调用时,编译器将会自动计算非类型形参的值。

int x[4];
array_init(x); // 相当于 array_init(int(&)[42])