Znalazłem błąd w GCC 6 i 7 (nie w GCC 5) wewnątrz funkcji constexpr, co prowadzi do różnych wyników, jeśli funkcja zostanie oceniona w czasie kompilacji (zły wynik) lub środowisko wykonawcze (poprawny wynik).GCC Bug - Dostęp do tablicy w/constrepr w 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;
}
Problemem jest przyrost (dzieje się również ubytek) czynności wewnątrz dostępu do tablicy.
Wynik czasu kompilacji wyrażenia stałowego wynosi 0 (niepoprawnie), a wynik w czasie wykonywania to 1 (poprawny).
Czy ktoś może potwierdzić ten błąd i zgłosić to: https://gcc.gnu.org/bugzilla/
Nie mogę utworzyć tam User account creation has been restricted.
konto. Skontaktowałem się z administratorem, ale błąd dla mnie jest istotny dla krytyki. Tak więc chciałem Cię również poinformować. Dziękuję Ci!