У меня есть собственный распределитель стека, который работает с тестовыми примерами, которые у меня есть, кроме std::vector::shrink_to_fit().
shrink_to_fit() пытается освободить память с помощью другого распределителя с отслеживанием состояния, отличного от того, из которого изначально была выделена память.
Я понимаю, что контейнер должен проверять распределители на равенство, прежде чем память, выделенная из одного распределителя, будет освобождена через другой. Я ошибся?
Цитата: https://en.cppreference.com/w/cpp/ named_req/Allocator
a1 == a2returns true only if the storage allocated by the allocator a1 can be deallocated through a2. Establishes reflexive, symmetric, and transitive relationship. Does not throw exceptions.
В моем примере операторы проверки равенства даже не вызываются.
Я использую g ++ 5.4.0. Полный пример кода можно найти здесь: https://onlinegdb.com/ryG9W5sx4





Копии распределителя должны сравниваться на равных. Ваш нет.
(Отсюда следует, что даже распределитель с отслеживанием состояния не может иметь встроенного хранилища.)