Annex D (normative) Compatibility features [depr]

D.9 The default allocator [depr.default.allocator]

Следующие члены и явная специализация шаблона класса определены в дополнение к тем, которые указаны в [default.allocator]:

namespace std {
  // specialize for void:
  template <> class allocator<void> {
  public:
    using value_type    = void;
    using pointer       = void*;
    using const_pointer = const void*;
    // reference-to-void members are impossible.

    template <class U> struct rebind { using other = allocator<U>; };
  };

  template <class T> class allocator {
   public:
    using size_type       = size_t;
    using difference_type = ptrdiff_t;
    using pointer         = T*;
    using const_pointer   = const T*;
    using reference       = T&;
    using const_reference = const T&;
    template <class U> struct rebind { using other = allocator<U>; };

    T* address(T& x) const noexcept;
    const T* address(const T& x) const noexcept;

    T* allocate(size_t n, const void* hint);

    template<class U, class... Args>
      void construct(U* p, Args&&... args);
    template <class U>
      void destroy(U* p);

    size_t max_size() const noexcept;
  };
}

T* address(T& x) const noexcept; const T* address(const T& x) const noexcept;

Returns: addressof(x).

T* allocate(size_t n, const void* hint);

Returns: Указатель на начальный элемент массива хранения размера n * sizeof(T), выровненный соответствующим образом для объектов типа T. Поддерживаются ли избыточно выровненные типы, зависит от реализации ([basic.align]).

Remarks: Хранилище получается с помощью вызова ​::​operator new(std​::​size_­t) ([new.delete]), но не указано, когда и как часто вызывается эта функция.

Throws: bad_­alloc если невозможно получить хранилище.

template <class U, class... Args> void construct(U* p, Args&&... args);

Effects: Как будто по: ​::​new((void *)p) U(std​::​forward<Args>(args)...);

template <class U> void destroy(U* p);

Effects: Как будто мимо p->~U().

size_t max_size() const noexcept;

Returns: Наибольшее значение, N при котором вызов allocate(N, 0) может быть успешным.