10
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
}

我已经用 ideone 编译了这段代码。并且想知道为什么它会给出编译错误。constexpr函数不允许作为template参数还是编译器中的错误?

编辑:更改const int get()int get() 此外,ideone 还有一个错误是,如果您删除,constexpr仍然允许声明数组!我认为这是 C99 的功能。

4

1 回答 1

13

GCC 4.5(至少是 Ideone 使用的版本)不完全支持constexpr,包括您的有效使用;它下降到一个const。GCC 4.6 及更高版本正确支持它。

于 2011-06-15T07:29:29.727 回答