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

前端之家收集整理的这篇文章主要介绍了c – 使用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函数不允许作为模板参数,还是编译器中的错误

编辑:改变const int get()到int get()
此外,还有一个与ideone有关的bug是,如果你删除constexpr然后still declaring an array is allowed!我认为这是一个C99功能.

解决方法

GCC 4.5(至少在Ideone使用的版本)不完全支持constexpr,包括您的有效使用;它下降到一个常数. GCC 4.6及以上版本正确支持.

猜你在找的C&C++相关文章