I would like to pass template argument to function call and the return value use as size of an array ie
constexpr int myPow(int a, int b){
int result = 1;
for(int i=0;i<b;i++)
result *= a;
return result;
}
template <int N>
class testClass{
public:
testClass(){}
int array[myPow(2,N)];
};
int main(){
testClass<3> A;
return 0;
}
compiler errors:
~ $ g++-4.6 test.cpp -std=gnu++0x
test.cpp: In function ‘constexpr int myPow(int, int)’:
test.cpp:6:1: error: body of constexpr function ‘constexpr int myPow(int, int)’ not a return-statement
test.cpp: At global scope:
test.cpp:12:23: error: array bound is not an integer constant before ‘]’ token
Any idea how to get around this?
return ...;(until C++14) that only uses compile-time tools or it won't give back a compile-time constant.myPowand a minimal completetestClass, and the actual compiler error.testClass?constexprfunction is not allowed to be more than a singlereturnstatement in C++11. The compiler error message already makes that apparent.