C++ の stream 入力で末尾にゴミが入ってるかどうかを確認する

Twitter でツッコまれたんですが、例えば以下のように std::stringstream を使った場合はエラーになりません。

#include <iostream>
#include <sstream>

int
main() {
    // 末尾にゴミがある
    std::stringstream str("123x");
    int x;
    str >> x;
    std::cout << x << std::endl;
    // => 123
}

[末尾にゴミが残ってるかの確認]

#include <iostream>
#include <sstream>

int
main() {
    std::stringstream str("123x");
    int x;
    str >> x;
    if( str.get() == std::char_traits<char>::eof() ){
        std::cout << x << std::endl;
    }
    else{
        std::cout << "Bad input." << std::endl;
    }
}
/*
output:
Bad input.
*/

これで一応ゴミが残ってるかどうかを確認することはできます。