Ответ 1
GCC 4.5 (по крайней мере, версия, используемая в Ideone) не поддерживает полностью constexpr
, включая ваше действительное использование; он опускается до const
. GCC 4.6 и правильно его поддерживает.
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()
Более того, есть еще одна ошибка с идеоне в том, что если вы удалите constexpr
, то все еще объявляет, что массив разрешен! Я считаю, что функция C99.
GCC 4.5 (по крайней мере, версия, используемая в Ideone) не поддерживает полностью constexpr
, включая ваше действительное использование; он опускается до const
. GCC 4.6 и правильно его поддерживает.