使用constexpr时编译错误

时间:2016-03-31 15:35:29

标签: c++ c++11 constexpr

#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)])

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;
}