最終更新日時:
が更新

履歴 編集

class template
<memory>

std::uses_allocator(C++11)

namespace std {
  template <class T, class Alloc>
  struct uses_allocator;
}

概要

Tがアロケータを使用するかを調べる。

このクラスがtrue_typeから派生する場合、以下のコンストラクタ初期化が可能である:

  • T(allocator_arg_t, alloc, args...)のように、第1引数にallocator_arg_t、第2引数にアロケータオブジェクトをとる構築。
  • T(args..., alloc)のように、最後の引数としてアロケータオブジェクトをとる構築。

このクラスは、scoped_allocator_adaptorクラスで使用される。

効果

このクラスは、型Tpublicなメンバ型allocator_typeを持っており、そのアロケータ型がAllocに変換可能であればtrue_typeから派生し、そうでなければfalse_typeから派生する。

#include <iostream>
#include <memory>

template <class T, class Allocator = std::allocator<T>>
struct X {
  T x_;
  Allocator alloc_;
public:
  using allocator_type = Allocator;

  X(std::allocator_arg_t, Allocator alloc, T x)
    : alloc_(alloc), x_(x) {}
};

int main()
{
  const bool result = std::uses_allocator<X<int>, std::allocator<int>>::value;
  static_assert(result, "should be true");
}

出力

バージョン

言語

  • C++11

処理系