https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67104
--- Comment #6 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Another example http://stackoverflow.com/questions/31878796/removing-constexpr-changes-values-of-array-on-gcc markus@x4 tmp % cat test.ii template <typename T, int N> struct array { constexpr T &operator[](int index) { return data[index]; } constexpr T operator[](int index) const { return data[index]; } T data[N]; }; constexpr array<long unsigned, 1001> make_bottle_count () { array<long unsigned, 1001> a{}; a[65] = 1; return a; } constexpr auto bottle_count = make_bottle_count (); static_assert (bottle_count[65], ""); markus@x4 tmp % clang++ -c -std=c++14 test.ii markus@x4 tmp % g++ -c -std=c++14 test.ii test.ii:17:1: error: static assertion failed: static_assert (bottle_count[65], ""); ^