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
}
Я скомпилировал этот код с идеоном . И было интересно, почему это дает ошибку компиляции.
Разрешено ли использование функции constexpr
в качестве аргумента template
или ошибка в компиляторе?
Редактировать : изменено const int get()
на int get()
Кроме того, есть еще одна ошибка с ideone: если вы удалите constexpr
, то все еще объявляет, что массив разрешен !! Я думаю, что это особенность C99.