Моя ставка в том, что _ret & = Method () переводится в _ret = _ret & Method (), а _ret в RHS оценивается до вызова метода ().
Так как _ret изначально имеет значение true, это верно, когда он оценивает _ret в RHS, а затем _ret изменяется на false в Method (), но это не имеет значения, поскольку Method () возвращает true и true & true = true.
Вероятно, это зависит от компилятора / среды ... оно основано на оценке слева направо, на которую не стоит рассчитывать.