C++1z コンテナに不完全型の最小サポートを追加

定義が完了していない不完全型(incomplete type)はsizeofがとれないので、アロケータとそれを使用するコンテナの実装が少し難しくなる場合があります。ですが、自分自身の型のオブジェクトがいくつあるかカウントする、というような場合に以下のようなコードを書くことになり、不完全型をコンテナの要素に指定できると便利です。

struct Entry {
    std::list<Entry> messages;
    // …
};

C++1zでは、以下の標準コンテナに限り、不完全型を要素とすることが許可されます:

  • std::vector
  • std::list
  • std::forward_list

ただし、これらのコンテナのなんらかのメンバ関数を呼び出す前には、要素型が完全型になっている必要があります。

なお、Boost Container Libraryでは1.61.0現在、static_vectorbasic_string以外の全てのコンテナに不完全型のサポートが入っています。(Unordered連想コンテナ、Multi-IndexといったBoost.Containerに含まれないBoostのコンテナは、その限りではありません)

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。