Dlaczego tak
Przy przypisaniu do typu bool każda wartość różna od zera zamienia się na true, więc b przechowuje true, a nie 5. W wyrażeniu arytmetycznym wartości logiczne są promowane do typu int: true staje się 1, stąd 1 + 1 = 2. Wynik 6 zakłada, że zmienna bool zapamiętała liczbę 5, a wypisanie słowa „true” wymagałoby manipulatora std::boolalpha i wyrażenia typu bool, a nie int.