使用constexpr函数作为模板参数是否有效?

时间:2011-06-15 07:24:31

标签: c++ templates c++11 compiler-errors constexpr

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功能。

1 个答案:

答案 0 :(得分:13)

GCC 4.5(至少在Ideone上使用的版本)并不完全支持constexpr,包括您的有效使用;它降至const。 GCC 4.6及以上版本正确支持它。