Por que in_avail () imprime zero mesmo se o fluxo tiver algum caractere?

#include <iostream>
int main( )
{
   using namespace std;
   cout << cin.rdbuf()->in_avail() << endl;
   cin.putback(1);
   cin.putback(1);
   cout << cin.rdbuf()->in_avail() << endl;
   return 0;
} //compile by g++-4.8.1

Eu acho que isso vai produzir 0 e 2

mas quando eu executo o código, ele gera 0 e 0, por quê?

ou se eu mudar cin.putback (1); int; cin >> a; com entrada 12 12;

ainda sai 0 e 0

questionAnswers(2)

yourAnswerToTheQuestion