Полез тут в boost/any.hpp поглядеть на операторы присваивания.
Сначала испужался было, что он меняет значения операндов, хотя вроде ж ему константную ссылку передют.
Потом пригляделся: там создаётся временный объект boost::any с новым значением, а потом делается swap.
Зачем? Почему просто не скопировать значение права налево?
то дело состоит в том что сначала создается временный объект, в него помещается текущее содержание объекта. Он удаляется а вместе в ним удаляется старое содержание.
Значение копируемого объекта оказывает в нашем объекте. Старое удалено. Финита
Подробно объяснять долго, погугли по exception safe assignment operator. Основная мысль - если вылетает исключение где нибудь, то объект остаётся в неизменном состоянии. Т.е. если вылетает исключение, то оно гарантированно вылетает в конструкторе копирования, и летит дальше, у исходного объекта состояние не изменилось. Если не вылетело, то опять же всё в порядке, т.к. swap гарантированно не кидает исключение.