Помимо очевидного ответа («если вы нарушите какое-либо требование, это неопределенное поведение, спокойной ночи и спасибо за игру»), я думаю, что худшее , которое может произойти, это то, что vector
реализация может опираться на требование, что «все экземпляры класса распределителя взаимозаменяемы» очевидным образом:
vector(const Allocator &youralloc = Allocator()) {
const Allocator hawhaw;
// use hawhaw and ignore youralloc.
// They're interchangeable, remember?
}
Глядя на источник, векторная реализация GCC (которая, я думаю, в конечном итоге основана на оригинальном STL SGIреализация) хранит копию объекта распределителя, переданного в этот конструктор, поэтому есть некоторая надежда, что этого не произойдет.
Я бы сказал, попробуйте и посмотрите, и запишите, что высделано очень осторожно , чтобы каждый, кто пытается использовать ваш код в реализации, которую вы не проверили, знает, что происходит.В стандарте разработчикам рекомендуется ослабить ограничения для распределителей, поэтому было бы грязным трюком заставить их выглядеть так, как будто они расслаблены, хотя на самом деле это не так.Что не означает, что этого не произойдет.
Если вам действительно повезет, есть некоторая документация для вашей реализации контейнера, в которой говорится о распределителях.