https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64333
Bug ID: 64333 Summary: C++14 constexpr gives wrong results when a looping constexpr function is evaluated twice Product: gcc Version: 5.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ville.voutilainen at gmail dot com CC: jason at redhat dot com #include <initializer_list> constexpr int max(std::initializer_list<int> ints) { int ret = *(ints.begin()); for (int i = 0; i < ints.size(); ++i) { if (*(ints.begin()+i) > ret) { ret = *(ints.begin()+i); } } return ret; } int main() { constexpr int z = max({7,6,5,4,3,2,1}); constexpr int z2 = max({5,4,3,2,1}); static_assert(z == 7, ""); static_assert(z2 == 5, ""); } z2 is 7. There's something fishy going on here. :)