std :: wsマニピュレータを使用してストリームから抽出すると、失敗ビットが発生する必要がありますか?次のコードでは、Clangでコンパイルされた(Xcode 4.5.1内の)プログラムが最終アサーションに失敗します。明らかs >> std::ws
にEOFで失敗を引き起こします。それでも、GCC4.7.2はアサーションに合格します。どちらが正しい?
#include <iostream>
#include <sstream>
#include <cassert>
int main(int argc, const char * argv[])
{
{
// Read string with trailing ws.
std::istringstream s( "test " );
std::string test;
s >> std::ws;
assert( !s.fail() ); // No ws to skip, but no failure.
s >> test;
assert( test == "test" );
assert( !s.fail() );
s >> std::ws;
assert( !s.fail() ); // No prob skipping trailing ws.
}
{
// Retry with no trailing ws.
std::istringstream s( "test" );
std::string test;
s >> std::ws;
assert( !s.fail() ); // No ws to skip, but no failure.
s >> test;
assert( test == "test" );
assert( !s.fail() );
s >> std::ws;
assert( !s.fail() ); // CLANG: Skipping absent ws at eof raises failbit.
}
return 0;
}