Дело в том, что Вы внутри метода B::deleter обращаетесь к глобальному оператору delete который пытается вызвать деструктор A::~A — а это ему не позволено (деструктор не public, а оператор delete не член классов A или B.
Решением могло бы быть определение оператора delete (как члена) внутри класса A (а вместе с ним определять и симметричный оператор new).
Еще одним (возможным) решением было бы добавить в класс A запись: friend operator delete (так не пользовал — не уверен, что верно)