Вы попали в мир неопределенного поведения.Ваш example_funcA имеет подпись:
void(const std::shared_ptr<A>&, const std::function<void(void)>&)
, но вы преобразуете его в:
void(const std::shared_ptr<A>&, std::function<void(void)>)
перед его вызовом.Это заставляет компилятор думать, что ему нужно скопировать второй аргумент, так как он ожидает, что он будет передан по значению, когда действительно example_funcA ожидает ссылку на const.Несоответствие между тем, как компилятор устанавливает (и копирует) аргумент, и тем, что на самом деле ожидает метод, вероятно, приводит к потере копии и, следовательно, к утечке.Поскольку вы привязываете свой shared_ptr к example_funcB, привязка захватывает shared_ptr, и именно этот захват вызывает специфическую утечку.
Как кто-то уже прокомментировал, вы должны избегать приведения в стиле C, поскольку вы не получите никакой защиты от компилятора, использующегоих.Предпочитаю static_cast <> или нет приведения, где вы можете.