Допустимо ли использовать функцию constexpr в качестве аргумента шаблона?

constexpr int get () { return 5; }
template 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.

10
задан iammilind 15 June 2011 в 07:44
поделиться