これらのfilebuf
フラグが渡されるコンストラクタ†は、C++11 の表 132 で定義されているフラグに基づいて動作します。
+-----------------------------------+-------------------+
| ios_base flag combination | stdio equivalent |
| binary in out trunc app | |
+-----------------------------------+-------------------+
| + | "w" |
| + + | "a" |
| + | "a" |
| + + | "w" |
| + | "r" |
| + + | "r+" |
| + + + | "w+" |
| + + + | "a+" |
| + + | "a+" |
+-----------------------------------+-------------------+
| + + | "wb" |
| + + + | "ab" |
| + + | "ab" |
| + + + | "wb" |
| + + | "rb" |
| + + + | "r+b" |
| + + + + | "w+b" |
| + + + + | "a+b" |
| + + + | "a+b" |
+-----------------------------------+-------------------+
ご覧のとおり、フラグの組み合わせはそのテーブルにはありません。
[C++11: 27.9.1.4/2]:
[..]mode
表に示されているフラグの組み合わせではない場合、オープンは失敗します。
それらはセマンティクスです。
† [C++11: 27.9.1.7/2]
&[C++11: 27.9.1.11/2]
は、モードがストリーム オブジェクトからバッファ オブジェクトに渡されることを示しています。