https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97629
Bug ID: 97629 Summary: Difference of addresses of array elements not a constant expression Product: gcc Version: 10.2.1 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Target Milestone: --- GCC rejects this valid code: struct array { int data[6]; constexpr int* begin() { return data; } constexpr int* end() { return data + 6; } constexpr int& operator[](int n) { return data[n]; } }; constexpr bool test() { array a{{0, 1, 2, 3, 4, 5}}; for (auto& i : a) if (i != (&i - &a[0])) return false; return true; } static_assert(test(), ""); ce.C:23:19: error: non-constant condition for static assertion static_assert(test(), ""); ~~~~^~ ce.C:23:19: in 'constexpr' expansion of 'test()' ce.C:18:18: error: '(((((int*)(& a.array::data)) + 4) - (& a.array::data[0])) <unknown operator> 4)' is not a constant expression if (i != (&i - &a[0])) ~~~~^~~~~~~~