wg21.link/lwg2218

чески допустимо использовать несоответствиеstd::allocator специализация (конечно, кроме ее специализации дляvoid) как параметр шаблона для контейнеров STL (не все из них, но перечисленные ниже плюс unordered_ (multi) map / set)? Следующий код компилируется нормально.

#include <list>
#include <forward_list>
#include <deque>
#include <set>
#include <map>

int main()
{
    struct A { bool operator < (A) const { return true; } };
    struct B {};
    struct C {};
    std::list< A, std::allocator< C > > l;
    std::forward_list< A, std::allocator< C > > fl;
    std::deque< A, std::allocator< C > > d;
    std::set< A, std::less< A >, std::allocator< C > > s;
    std::multiset< A, std::less< A >, std::allocator< C > > ms;
    std::map< A, B, std::less< A >, std::allocator< C > > m;
    std::multimap< A, B, std::less< A >, std::allocator< C > > mm;
}

Я полагаю, что это происходит из-за того, что распределитель немедленно возвращается к базовому типу узла без какого-либо отношения к его типу источника.

Ответы на вопрос(1)

Ваш ответ на вопрос