C++ 名前付き要件: FormattedInputFunction
From cppreference.com
[編集] 要件
A FormattedInputFunction は、以下の操作を実行するストリーム入力関数です。
- 自動記憶域期間を持つ `noskipws` 引数を false に設定した `basic_istream::sentry` 型のオブジェクトを構築し、以下の操作を実行します。
- 入力ストリームで eofbit または badbit が設定されている場合、`failbit` も設定します。この入力ストリームの 例外マスク で `failbit` に対する例外が有効になっている場合((exceptions() & failbit) != 0)、ios_base::failure をスローします。
- 該当する場合、tie() された出力ストリームをフラッシュします。
- この入力ストリームで `ios_base::skipws` フラグが設定されている場合、以下のいずれかが真になるまで、入力ストリームから文字を抽出し破棄します。
- 入力ストリームの次の利用可能な文字が空白文字でない。これは、この入力ストリームに現在注入されているロケールの std::ctype ファセットによってテストされます。空白でない文字は抽出されません。
- ストリームの終端に到達した場合。この場合、`failbit` および `eofbit` が設定されます。これらのビットのいずれかに対してストリームで例外が有効になっている場合(ios_base::failure がスローされます。
- `sentry::operator bool()` を呼び出して sentry の状態をチェックします。これは basic_ios::good と同等です。
- sentry が false を返したか、または sentry のコンストラクタが例外をスローした場合、入力は行われません。
- sentry が true を返した場合、rdbuf()->sbumpc() または rdbuf()->sgetc() を呼び出すかのように、入力を実行します。
- ストリームの終端に到達した場合(rdbuf()->sbumpc() または rdbuf()->sgetc() の呼び出しが Traits::eof() を返す)、`eofbit` が設定されます。このストリームの 例外マスク で `eofbit` に対する例外が有効になっている場合((exceptions() & eofbit) != 0)、ios_base::failure がスローされます。
- 入力中に例外がスローされた場合、入力ストリームで `badbit` が設定されます。このストリームの 例外マスク で `badbit` に対する例外が有効になっている場合((exceptions() & badbit) != 0)、その例外も再スローされます。
- 例外がスローされなかった場合、*this を返します。
- いずれの場合も、例外による終了か返しかかわらず、この関数を離れる前に sentry のデストラクタが呼び出されます。
[編集] 標準ライブラリ
以下の標準ライブラリ関数は、FormattedInputFunction です。
- basic_istream::operator>>(int, long, double, void*, bool)
- operator>>(std::basic_istream, char&)
- operator>>(std::basic_istream, char*)
- operator>>(std::basic_istream, std::bitset)
- operator>>(std::basic_istream, std::string)
- std::get_money の戻り値に対して呼び出された場合の `operator>>`
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 160 | C++98 | キャッチされた例外が 再スローされるかどうかを決定するプロセスで、存在しない関数 `exception()` に言及していましたが、 |
exceptions() に修正されました。 |