https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114937
--- Comment #3 from Mital Ashok <mital at mitalashok dot co.uk> --- My real code looks more like: void sat_inc(int& y) { if (y < __INT_MAX__) ++y; } template<typename... F> void f(int& x, F&&... functions) { int copy = x; (functions(copy), ...); if (copy > x) x = copy; } void g(int& x) { f(x, sat_inc); } ... Where `g(x)` became `++x` unconditionally