Operator Overloading C++ Tutorial

/* The following code example is taken from the book
 * "The C++ Standard Library - A Tutorial and Reference"
 * by Nicolai M. Josuttis, Addison-Wesley, 1999
 *
 * (C) Copyright Nicolai M. Josuttis 1999.
 * Permission to copy, use, modify, sell and distribute this software
 * is granted provided this copyright notice appears in all copies.
 * This software is provided "as is" without express or implied
 * warranty, and with no claim as to its suitability for any purpose.
 */
#include 
#include 
// Ignore: manipulator that ignores N lines
class Ignore {
  public:
    int num;
    Ignore(int n) : num(n) {
    }
};
// convenience function
Ignore ignore(int n)
{
    return Ignore(n);
}
std::istream& operator >> (std::istream& strm, const Ignore& manip)
{
    for (int i=0; i        strm.ignore(std::numeric_limits::max(),'\n');
    }
    return strm;
}
int main()
{
    char c;
    std::cout << "ignore two lines and print frist character following them\n";
    std::cin >> ignore(2) >> c;
    std::cout << "c: " << c << std::endl;
}
ignore two lines and print frist character following them
a
v
a
c: a