为什么 "size_of_array" 模板函数不能与 int a[n](运行时定义的大小)一起使用,而它与 int a[4] 一起工作?

Why does the "size_of_array" template fucntion does not work with int a[n] (size defined at runtime) while it works fine with int a[4]?

template <typename T, int n >
int tell_me_size(T (&) [n]){
  return n;
}

此代码适用于

int a[4];
cout<< tell_me_size(a)<<endl;

while 不适用于

int n;
cin>>n;
int a[n];
cout<< tell_me_size(a)<<endl;

后面报错“no matching function for call to ‘tell_me_size(int [n])”

根据 C++ 20 标准(13.4.3 模板 non-type 参数)

2 A template-argument for a non-type template-parameter shall be a converted constant expression (7.7) of the type of the template-parameter.

注意像这样的变长数组

int n;
cin>>n;
int a[n];

不是标准的 C++ 功能。