「ワーキング ドラフト C++、2012-11-02」より
21.1 一般 [strings.general]
1 この節では、配列以外の POD (3.9) 型のシーケンスを操作するためのコンポーネントについて説明します。
21.4.1 basic_string の一般要件 [string.require]
5 basic_string オブジェクト内の char のようなオブジェクトは、連続して格納されなければならない。つまり、任意の basic_string オブジェクト s について、同一性 &*(s.begin() + n) == &*s.begin() + n は、0 <= n < s.size となる n のすべての値に対して保持されます。 ().
しかし
6 basic_string シーケンスの要素を参照する参照、ポインター、および反復子は、その basic_string オブジェクトの次の使用によって無効化される場合があり
ます
。
operator[]、at、front、back、begin、rbegin、end、rend を除く非 const メンバー関数の呼び出し。
したがって、生の配列を別の場所で使用している間は、これらの関数を呼び出さないように注意する限り安全です。
更新:
文字特性と要件は、21.2 文字特性 [char.traits]および21.2.1 文字特性要件 [char.traits.require]で説明されています。さらに、typedef と特殊化は、それぞれ 21.2.2 特性 typedef [char.traits.typedefs]と21.2.3 char_traits 特殊化 [char.traits.specializations]で説明されています。
これらの特性は、入出力ライブラリでも使用されます。eof()
そのため、またはpos_type
やのような要件がありoff_type
、 のコンテキストでは意味がありませんbasic_string
。
char
、char16_t
、char32_t
およびwchar_t
. _
ただし、あなたの例ではgcc 4.7でそのまま使用できましたが、最小限のものを定義bool_traits
しました
struct bool_traits {
typedef bool char_type;
static void assign(char_type &r, char_type d);
static char_type *copy(char_type *s, const char_type *p, std::size_t n);
static char_type *move(char_type *s, const char_type *p, std::size_t n);
};
提供されたデフォルトの実装(gcc 4.7)を取り、それを次のように使用しました
std::basic_string<bool, bool_traits> ab;
お使いの環境では、機能する実装が既に提供されている場合があります。そうでない場合は、シンプルbool_traits
またはテンプレートの特殊化をstd::char_traits<bool>
自分で実装できます。
文字特性の完全なインターフェイスは、ワーキング ドラフト、PDF、またはcppreference.com - std::char_traitsで確認できます。