#include <stdio.h>
#include <iostream>
using namespace std;
template <typename T, int N>
int ReturnArraySize(T (&arg1)[N]) {
return N;
}
constexpr int ReturnTheSum(int arg1, int arg2) {
return arg1 + arg2;
}
int main(int argc, char **argv)
{
int arr1[20];
int arr2[ReturnArraySize(arr1)];
int arr3[ReturnTheSum(ReturnArraySize(arr1), ReturnArraySize(arr2))];
return 0;
}
编译代码时,出现以下错误:
/root/Documents/C++11_Fundamentals/ConstExprRelatedFunc/main.cpp:19:67:错误:没有匹配函数来调用“
ReturnArraySize(int [(<anonymous> + 1)])
”
答案 0 :(得分:2)
由于ReturnArraySize
未标记为constexpr
函数,arr2
成为VLA(variable-length array,GCC扩展,不属于C ++标准),但不能在编译时查询其大小(即,由函数模板推导)。
您可以通过ReturnArraySize
constexpr
:
template <typename T, int N>
constexpr int ReturnArraySize(T (&arg1)[N]) {
//~~~~~~^
return N;
}