gcc5.4 не компилирует следующий код:
// source.cpp
int nonconstexprfunc()
{
return 14;
}
constexpr int func(int n)
{
if (n < 0)
return nonconstexprfunc();
return n*n;
}
int main()
{
constexpr int t1 = func(0);
return 0;
}
Используемая мной команда:
$ g++ -std=c++14 -c source.cpp
Выход:
In function ‘constexpr int func(int)’:
error: ‘constexpr int func(int)’ called in a constant expression
constexpr int t1 = func(0);
In function ‘int main()’:
error: ‘constexpr int func(int)’ called in a constant expression
constexpr int t1 = func(0);
Но я могу скомпилировать этот source.cpp, используя gcc6.4. Разве gcc5.4 не полностью поддерживает функции constexpr?
Что еще интереснее, я могу скомпилировать этот source.cpp с помощью icpc (компилятор Intel C ++), который использует gcc5.4 - я полагаю, должна быть опция для компиляции этого кода с использованием gcc5.4.
$ icpc -v
icpc version 19.0 (gcc version 5.4.0 compatibility)
$ icpc -std=c++14 -c source.cpp
no errors