rien à voir...
Le résultat est différent car dans un cas on accumule sur f2, dans l'autre sur une copie anonyme et temporaire de f2.
F2 est un accumulateur, son opérator() ne peut pas être const.
Sans ref, comme bind travaille sur une copie, f2 n'est pas modifié et f2.s == 0