2016-03-31 12 views
0
#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; 
} 

constexprのを使用しながら:arr2はVLA(variable-length array、GCCの拡張となり、コンパイルエラー私は、コードをコンパイルすると、私は次のエラーを取得する

/root/Documents/C++11_Fundamentals/ConstExprRelatedFunc/main.cpp:19:67: error: no matching function for call to ' ReturnArraySize(int [(<anonymous> + 1)]) '

+0

私は答えを受け入れることを検討@skvermaこのエラーは私の問題は – skverma

答えて

2

ReturnArraySizeconstexpr関数としてマークされていないのでC++標準の一部ではありません)、コンパイル時にそのサイズを問い合わせることはできません(つまり、関数テンプレートによって推測されます)。

あなたはReturnArraySizeをすることによってこの問題を解決することができconstexpr

template <typename T, int N> 
constexpr int ReturnArraySize(T (&arg1)[N]) { 
//~~~~~~^ 
    return N; 
} 
+0

おかげで来ている理由を知りたいです – skverma

+0

を固定してしまった –

関連する問題