Я обнаружил ошибку в GCC 6 и 7 (не в GCC 5) внутри функций constexpr, которая приводит к разным результатам, если функция получает оценки во время компиляции (неверный результат) или во время выполнения (правильный результат).
#include <iostream>
constexpr int bar(int *b) {
int i = 0;
b[i++] = 1; // GCC produce here an failure.
return 0;
}
constexpr int foo()
{
int tmp[] = {0};
bar(tmp);
return tmp[0];
}
constexpr int cexprI = foo();
int main()
{
std::cout << cexprI << " " << foo() << "\n";
return 0;
}
Проблема заключается в операции увеличения (также происходит для уменьшения) внутри доступа к массиву.
Результат времени компиляции константного выражения равен 0 (неверно), а результат времени выполнения равен 1 (правильно).
Может ли кто-нибудь подтвердить эту ошибку и сообщить об этом: https://gcc.gnu.org/bugzilla/
Я не могу создать там аккаунт User account creation has been restricted.
, Я связался с администратором, но ошибка для меня является серьезной для критической. Так что он хотел также сообщить вам. Спасибо!
Я открыла https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77553 .
Спасибо за сообщение о проблеме.
Других решений пока нет …