https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87744
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- if (!__l._M_hi) { __l._M_lo %= __m; return __l; } auto __n = __l._M_hi ? __builtin_clzll(__l._M_hi) : 64 + __builtin_clzll(__l._M_lo); So, on the __n initializer you already know that __l._M_hi is non-zero, no need to test it again. Sure, the compiler will optimize it, but the shorter the method in the header the better.