constexpr int get () { return 5; }
template<int N> struct Test {};
int main ()
{
int a[get()]; // ok
Test< get() > obj; // error:'int get()' cannot appear in a constant-expression
}
我有compiled this code with ideone。并且想知道为什么它会给出编译错误。
是constexpr
函数不允许作为template
参数,还是编译器中的错误?
修改:将const int get()
更改为int get()
此外,还有一个 bug ,如果你删除了constexpr
,那么still declaring an array is allowed !!我认为这是一个C99功能。
答案 0 :(得分:13)
GCC 4.5(至少在Ideone上使用的版本)并不完全支持constexpr
,包括您的有效使用;它降至const
。 GCC 4.6及以上版本正确支持它。