次の (おもちゃの) プログラムは、libstdc++ と libc++ に対してリンクすると、異なるものを返します。これは libc++ のバグですか、それとも istream eof() の仕組みがわかりませんか? -std=c++0x の有無にかかわらず、Linux および mac os x で g++ を使用し、mac os x で clang を使用して実行しようとしました。(get() などによる) 読み取りの試行が実際に失敗するまで、eof() は true を返さないというのが私の印象でした。これは libstdc++ の動作ですが、libc++ の動作ではありません。
#include <iostream>
#include <sstream>
int main() {
std::stringstream s;
s << "a";
std::cout << "EOF? " << (s.eof() ? "T" : "F") << std::endl;
std::cout << "get: " << s.get() << std::endl;
std::cout << "EOF? " << (s.eof() ? "T" : "F") << std::endl;
return 0;
}
Thor:~$ g++ test.cpp
Thor:~$ ./a.out
EOF? F
get: 97
EOF? F
Thor:~$ clang++ -std=c++0x -stdlib=libstdc++ test.cpp
Thor:~$ ./a.out
EOF? F
get: 97
EOF? F
Thor:~$ clang++ -std=c++0x -stdlib=libc++ test.cpp
Thor:~$ ./a.out
EOF? F
get: 97
EOF? T
Thor:~$ clang++ -stdlib=libc++ test.cpp
Thor:~$ ./a.out
EOF? F
get: 97
EOF? T